SED sed1line

From here: sed1line

sed 's/[ \t]*$//'                   # see note on '\t' at end of file
 * 1) delete trailing whitespace (spaces, tabs) from end of each line

sed 's/^[ \t]*//;s/[ \t]*$//'
 * 1) delete BOTH leading and trailing whitespace from each line

sed 's/^/    /'
 * 1) insert 5 blank spaces at beginning of each line (make page offset)

sed -e :a -e 's/^.\{1,78\}$/ &/;ta' # set at 78 plus 1 space
 * 1) align all text flush right on a 79-column width

sed -e :a -e 's/^.\{1,77\}$/ & /;ta'                     # method 1 sed -e :a -e 's/^.\{1,77\}$/ &/;ta' -e 's/\( *\)\1/\1/'  # method 2
 * 1) center all text in the middle of 79-column width. In method 1,
 * 2) spaces at the beginning of the line are significant, and trailing
 * 3) spaces are appended at the end of the line. In method 2, spaces at
 * 4) the beginning of the line are discarded in centering the line, and
 * 5) no trailing spaces appear at the end of lines.

sed 's/foo/bar/'            # replaces only 1st instance in a line sed 's/foo/bar/4'           # replaces only 4th instance in a line sed 's/foo/bar/g'           # replaces ALL instances in a line sed 's/\(.*\)foo\(.*foo\)/\1bar\2/' # replace the next-to-last case sed 's/\(.*\)foo/\1bar/'           # replace only the last case
 * 1) substitute (find and replace) "foo" with "bar" on each line

sed '/baz/s/foo/bar/g'
 * 1) substitute "foo" with "bar" ONLY for lines which contain "baz"

sed '/baz/!s/foo/bar/g'
 * 1) substitute "foo" with "bar" EXCEPT for lines which contain "baz"

sed 's/scarlet/red/g;s/ruby/red/g;s/puce/red/g'  # most seds gsed 's/scarlet\|ruby\|puce/red/g'               # GNU sed only
 * 1) change "scarlet" or "ruby" or "puce" to "red"

sed '1!G;h;$!d'              # method 1 sed -n '1!G;h;$p'            # method 2
 * 1) reverse order of lines (emulates "tac")
 * 2) bug/feature in HHsed v1.5 causes blank lines to be deleted

sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//'
 * 1) reverse each character on the line (emulates "rev")

sed '$!N;s/\n/ /'
 * 1) join pairs of lines side-by-side (like "paste")

sed -e :a -e '/\\$/N; s/\\\n//; ta'
 * 1) if a line ends with a backslash, append the next line to it

sed -e :a -e '$!N;s/\n=/ /;ta' -e 'P;D'
 * 1) if a line begins with an equal sign, append it to the previous line
 * 2) and replace the "=" with a single space

gsed ':a;s/\B[0-9]\{3\}\>/,&/;ta'                    # GNU sed sed -e :a -e 's/\(.*[0-9]\)\([0-9]\{3\}\)/\1,\2/;ta' # other seds
 * 1) add commas to numeric strings, changing "1234567" to "1,234,567"

gsed -r ':a;s/(^|[^0-9.])([0-9]+)([0-9]{3})/\1\2,\3/g;ta'
 * 1) add commas to numbers with decimal points and minus signs (GNU sed)

gsed '0~5G'                 # GNU sed only sed 'n;n;n;n;G;'            # other seds
 * 1) add a blank line every 5 lines (after lines 5, 10, 15, 20, etc.)

SELECTIVE PRINTING OF CERTAIN LINES:

sed 10q
 * 1) print first 10 lines of file (emulates behavior of "head")

sed q
 * 1) print first line of file (emulates "head -1")

sed -e :a -e '$q;N;11,$D;ba'
 * 1) print the last 10 lines of a file (emulates "tail")

sed '$!N;$!D'
 * 1) print the last 2 lines of a file (emulates "tail -2")

sed '$!d'                   # method 1 sed -n '$p'                 # method 2
 * 1) print the last line of a file (emulates "tail -1")

sed -e '$!{h;d;}' -e x             # for 1-line files, print blank line sed -e '1{$q;}' -e '$!{h;d;}' -e x # for 1-line files, print the line sed -e '1{$d;}' -e '$!{h;d;}' -e x # for 1-line files, print nothing
 * 1) print the next-to-the-last line of a file

sed -n '/regexp/p'          # method 1 sed '/regexp/!d'            # method 2
 * 1) print only lines which match regular expression (emulates "grep")

sed -n '/regexp/!p'         # method 1, corresponds to above sed '/regexp/d'             # method 2, simpler syntax
 * 1) print only lines which do NOT match regexp (emulates "grep -v")

sed -n '/regexp/{g;1!p;};h'
 * 1) print the line immediately before a regexp, but not the line
 * 2) containing the regexp

sed -n '/regexp/{n;p;}'
 * 1) print the line immediately after a regexp, but not the line
 * 2) containing the regexp

sed -n -e '/regexp/{=;x;1!p;g;$!N;p;D;}' -e h
 * 1) print 1 line of context before and after regexp, with line number
 * 2) indicating where the regexp occurred (similar to "grep -A1 -B1")

sed '/AAA/!d; /BBB/!d; /CCC/!d'
 * 1) grep for AAA and BBB and CCC (in any order)

sed '/AAA.*BBB.*CCC/!d'
 * 1) grep for AAA and BBB and CCC (in that order)

sed -e '/AAA/b' -e '/BBB/b' -e '/CCC/b' -e d   # most seds gsed '/AAA\|BBB\|CCC/!d'                       # GNU sed only
 * 1) grep for AAA or BBB or CCC (emulates "egrep")

sed -e '/./{H;$!d;}' -e 'x;/AAA/!d;'
 * 1) print paragraph if it contains AAA (blank lines separate paragraphs)
 * 2) HHsed v1.5 must insert a 'G;' after 'x;' in the next 3 scripts below

sed -e '/./{H;$!d;}' -e 'x;/AAA/!d;/BBB/!d;/CCC/!d'
 * 1) print paragraph if it contains AAA and BBB and CCC (in any order)

sed -e '/./{H;$!d;}' -e 'x;/AAA/b' -e '/BBB/b' -e '/CCC/b' -e d gsed '/./{H;$!d;};x;/AAA\|BBB\|CCC/b;d'        # GNU sed only
 * 1) print paragraph if it contains AAA or BBB or CCC

sed -n '/^.\{65\}/p'
 * 1) print only lines of 65 characters or longer

sed -n '/^.\{65\}/!p'       # method 1, corresponds to above sed '/^.\{65\}/d'           # method 2, simpler syntax
 * 1) print only lines of less than 65 characters

sed -n '/regexp/,$p'
 * 1) print section of file from regular expression to end of file

sed -n '8,12p'              # method 1 sed '8,12!d'                # method 2
 * 1) print section of file based on line numbers (lines 8-12, inclusive)

sed -n '52p'                # method 1 sed '52!d'                  # method 2 sed '52q;d'                 # method 3, efficient on large files
 * 1) print line number 52

gsed -n '3~7p'              # GNU sed only sed -n '3,${p;n;n;n;n;n;n;}' # other seds
 * 1) beginning at line 3, print every 7th line

sed -n '/Iowa/,/Montana/p'            # case sensitive
 * 1) print section of file between two regular expressions (inclusive)

SELECTIVE DELETION OF CERTAIN LINES:

sed '/Iowa/,/Montana/d'
 * 1) print all of file EXCEPT section between 2 regular expressions

sed '$!N; /^\(.*\)\n\1$/!P; D'
 * 1) delete duplicate, consecutive lines from a file (emulates "uniq").
 * 2) First line in a set of duplicate lines is kept, rest are deleted.

sed -n 'G; s/\n/&&/; /^\([ -~]*\n\).*\n\1/d; s/\n//; h; P'
 * 1) delete duplicate, nonconsecutive lines from a file. Beware not to
 * 2) overflow the buffer size of the hold space, or else use GNU sed.

sed '$!N; s/^\(.*\)\n\1$/\1/; t; D'
 * 1) delete all lines except duplicate lines (emulates "uniq -d").

sed '1,10d'
 * 1) delete the first 10 lines of a file

sed '$d'
 * 1) delete the last line of a file

sed 'N;$!P;$!D;$d'
 * 1) delete the last 2 lines of a file

sed -e :a -e '$d;N;2,10ba' -e 'P;D'  # method 1 sed -n -e :a -e '1,10!{P;N;D;};N;ba' # method 2
 * 1) delete the last 10 lines of a file

gsed '0~8d'                          # GNU sed only sed 'n;n;n;n;n;n;n;d;'               # other seds
 * 1) delete every 8th line

sed '/pattern/d'
 * 1) delete lines matching pattern

sed '/^$/d'                          # method 1 sed '/./!d'                          # method 2
 * 1) delete ALL blank lines from a file (same as "grep '.' ")

sed '/./,/^$/!d'         # method 1, allows 0 blanks at top, 1 at EOF sed '/^$/N;/\n$/D'       # method 2, allows 1 blank at top, 0 at EOF
 * 1) delete all CONSECUTIVE blank lines from file except the first; also
 * 2) deletes all blank lines from top and end of file (emulates "cat -s")

sed '/^$/N;/\n$/N;//D'
 * 1) delete all CONSECUTIVE blank lines from file except the first 2:

sed '/./,$!d'
 * 1) delete all leading blank lines at top of file

sed -e :a -e '/^\n*$/{$d;N;ba' -e '}' # works on all seds sed -e :a -e '/^\n*$/N;/\n$/ba'       # ditto, except for gsed 3.02.*
 * 1) delete all trailing blank lines at end of file

sed -n '/^$/{p;h;};/./{x;/./p;}'
 * 1) delete the last line of each paragraph

SPECIAL APPLICATIONS:

sed "s/.`echo \\\b`//g"   # double quotes required for Unix environment sed 's/.^H//g'            # in bash/tcsh, press Ctrl-V and then Ctrl-H sed 's/.\x08//g'          # hex expression for sed 1.5, GNU sed, ssed
 * 1) remove nroff overstrikes (char, backspace) from man pages. The 'echo'
 * 2) command may need an -e switch if you use Unix System V or bash shell.

sed '/^$/q'               # deletes everything after first blank line
 * 1) get Usenet/e-mail message header

sed '1,/^$/d'             # deletes everything up to first blank line
 * 1) get Usenet/e-mail message body

sed '/^Subject: */!d; s///;q'
 * 1) get Subject header, but remove initial "Subject: " portion

sed '/^Reply-To:/q; /^From:/h; /./d;g;q'
 * 1) get return address header

sed 's/ *(.*)//; s/>.*//; s/.*[:<] *//'
 * 1) parse out the address proper. Pulls out the e-mail address by itself
 * 2) from the 1-line return address header (see preceding script)

sed 's/^/> /'
 * 1) add a leading angle bracket and space to each line (quote a message)

sed 's/^> //'
 * 1) delete leading angle bracket & space from each line (unquote a message)

sed -e :a -e 's/<[^>]*>//g;/</N;//ba'
 * 1) remove most HTML tags (accommodates multiple-line tags)