Welcome to bashoneliners.com, a growing collection of practical and well-explained Bash tips and tricks. We are committed to review every contributed one-liner to ensure its high quality, practical usefulness, and a solid explanation of how it works. We want to document one-liners for frequent (non-trivial) tasks executed in the shell, written in the best possible way, following good practices known in the industry. To get the latest Bash one-liners, follow @bashoneliners on Twitter. If you find any problems, please report on GitHub Issues.
1 score

Function to extract columns from an input stream

 $ col() { awk '{print $('$(echo $* | sed -e s/-/NF-/g -e 's/ /),$(/g')')}'; }

Dec. 7, 2012, 4:14 p.m.Janos

1 score

Define an own watch(1)-like function

 $ watch () { interrupted=false; trap "interrupted=true" INT; while ! $interrupted; do $*; sleep 1 || interrupted=true; done; }

Nov. 14, 2012, 10 p.m.ulidtko

1 score

Remove offending key from known_hosts file with one swift move

 $ vi +18d +wq ~/.ssh/known_hosts

Oct. 30, 2012, 9:28 p.m.Janos

1 score

Replace the header of all files found.

 $ find . -type f -name '*.html' -exec sed -i -e '1r common_header' -e '1,/STRING/d' {} \;

Oct. 25, 2012, 9:29 a.m.jam

1 score

Redirect stdout to a file you don't have write permission on

 $ echo hello | sudo tee -a /path/to/file

Sept. 11, 2012, 9:24 a.m.Janos

1 score

`tail -f` a file until text is seen

 $ tail -f /path/to/file.log | sed '/^Finished: SUCCESS$/ q'

Aug. 22, 2012, 8:29 a.m.Janos

1 score

Recording SSH sessions

 $ ssh -l USER HOST | tee -a /path/to/file

Aug. 15, 2012, 5:04 p.m.LeandroToledo

1 score

Record audio from microphone or sound input from the console

 $ sox -t ossdsp -w -s -r 44100 -c 2 /dev/dsp -t raw - | lame -x -m s - File.mp3

July 28, 2012, 8:55 p.m.Kleper

1 score

Use vim to pretty-print code with syntax highlighting

 $ vim +'hardcopy > output.ps' +q style.css 

July 21, 2012, 12:13 a.m.Janos

1 score

Log and verify files received via FTP

 $ for i in $(cat /var/log/vsftpd.log | grep $DATE_TIME | grep UPLOAD | grep OK); do ls /FTP/HOME/$i >> /dev/null 2> \&1; if \[ $? = 0 \]; then echo "$i" >> $FILES_OK_UPLOADS.log; else  echo "$DATE ERROR: File $i not found" >> $FTP_FILES_NOTOK_$DATE_TIME.log; fi; done

July 10, 2012, 8:54 p.m.dark_axl

1 score

Edit the Gimp launcher file to disable the splash screen

 $ printf '%s\n' ',s/^Exec=[^ ]*/& -s/' w q | ed /usr/share/applications/gimp.desktop

July 1, 2012, 12:57 a.m.Anon8yhYNaVe

1 score

Faster disk imaging with dd

 $ dd if=/dev/sda bs=$(hdparm -i /dev/sda | grep BuffSize | cut -d ' ' -f 3 | tr [:lower:] [:upper:] | tr -d BUFFSIZE=,) conv=noerror | dd of=image.dd conv=noerror

May 19, 2012, 3:28 a.m.austindcc

1 score

Convert a decimal number to octal, hexadecimal, binary, or anything

 $ bc <<< 'obase=2;1234'

April 12, 2012, 8 p.m.openiduser43

1 score

Remove carriage return '\r' character in many files, without looping and intermediary files

 $ vi +'bufdo set ff=unix' +'bufdo %s/^M$//' +q file1 file2 file3

March 30, 2012, 3:50 p.m.Janos

1 score

Sort and remove duplicate lines in a file in one step without intermediary files

 $ vi +'%!sort | uniq' +wq file.txt

March 22, 2012, 1:09 p.m.Janos

1 score

Show files containing "foo" and "bar" and "baz"

 $ grep -l 'baz' $(grep -l 'bar' $(grep -lr 'foo' *) )

March 16, 2012, 5:37 a.m.Anon5eqErEbE

1 score

Find in files, recursively

 $ grep -rn 'nameserver' /etc 2>/dev/null

Feb. 19, 2012, 8:24 a.m.atpessoa

1 score

Calculate the total disk space used by a list of files or directories

 $ du -cshx ./a ./b

Feb. 15, 2012, 10:43 p.m.openiduser14

1 score

Create a compressed tar file that rsync will transfer efficiently

 $ GZIP='--rsyncable' tar cvzf bobsbackup.tar.gz /home/bob

Feb. 15, 2012, 12:24 p.m.Anon6y5E4Use

1 score

Cut select pages from a pdf file and create a new file from those pages.

 $ ps2pdf -dFirstPage=3 -dLastPage=10 input.pdf output.pdf

Feb. 15, 2012, 11:08 a.m.Anon6y5E4Use

1 score

View a file with line numbers

 $ cat -n /path/to/file | less

Feb. 13, 2012, 5:14 p.m.openiduser28

1 score

Print the lines of file2 that are missing in file1

 $ comm -23 file2 file1

Feb. 13, 2012, 8:26 a.m.Anon9ge6A4uD

1 score

Uses 'at' to run an arbitrary command at a specified time.

 $ echo 'play alarmclock.wav 2>/dev/null' | at 07:30 tomorrow

Feb. 4, 2012, 11:03 a.m.Anon5MAQumYj

1 score

Calculate an h index from an EndNote export

 $ MAX=$(NUM=1;cat author.xml |perl -p -e 's/(Times Cited)/\n$1/g'|grep "Times Cited" |perl -p -e 's/^Times Cited:([0-9]*).*$/$1/g'|sort -nr | while read LINE; do if [ $LINE -ge $NUM ]; then echo "$NUM"; fi; NUM=$[$NUM+1]; done;); echo "$MAX"|tail -1

Feb. 4, 2012, 1:06 a.m.openiduser14

1 score

Cut select pages from a pdf file and create a new file from those pages.

 $  pdftk input.pdf cat 2-4 7 9-10 output output.pdf

Feb. 3, 2012, 6:50 a.m.mmaki