sedµÄһƪǿÀý×Ó¼¯½õµÄ·Òë
·ÒëÁËһϠhttp://bbs.chinaunix.net/forum/24/20040514/325187.html
ÎÒÊÇÐÂÊÖ£¬·ÒëµÃ²»ºÃ£¬¼Ó×¢µÃÂíÂí»¢»¢£¬ºÜ¶àµØ·½¶¼ÊÇÆ¾×Ô¼ºµÄÀí½âдµÄ¡£ÓÉÓÚ¸Õ¿ªÊ¼Ñ§sed£¬ËùÒÔºÜ¶àµØ·½Ð´µÃºÜ³õ¼¶£¬ºÇºÇ£¬ÄÑÃâÓÐЩÂÞࡣдµ½×îºóÓÖÓÐЩͷÔΣ¬»¹Çë´óϺÃǶà¶àÖ¸µã£¬ÀïÍ·ºÃ¼¸¸öÃüÁîÎÒ½âÊͲ»Çå³þ£¬Èç²»Áߴͽ̣¬¸Ð¼¤²»¾¡£¡
FILE SPACING:
# double space a file
#ʹһ¸öÎļþÖÐÿһÐж¼Õ¼ÓÃÁ½Ðпռä(¾ÍÊÇÔÚÿһÐкó±ß²åÒ»ÐпÕÐÐ)
sed G
###sed ÖÐGÃüÁîµÄ½âÊÍΪappend hold space to pattern space.
###¾ÍÊÇÔÚµ±Ç°Î»Öúó¼ÓÒ»Ðб£Áô¿Õ¼äÖеÄÄÚÈÝ£¬ÎÞÈκζ¯×÷ʱ£¬±£Áô¿Õ¼äΪ¿ÕÐÐ
###ËùÒÔ¾Ídouble space a file ÁË£¬ºÇºÇ£®
# double space a file which already has blank lines in it. Output file
# should contain no more than one blank line between lines of text.
#¼ÙÈôÎļþÒѾº¬Óпհ×ÐÐÔÚÆäÖУ¬Ê¹Ò»¸öÎļþÖÐÿһÐÐÕ¼ÓÃÁ½ÐÐ
#¿Õ¼ä¡£Êä³öÎļþÖÐÎı¾ÐÐÖ®¼ä²»º¬Óг¬¹ýÒ»ÐеĿÕÐÐ
sed '/^$/d;G'
###ÏÈÓÃsed '/^$/d' ²éÕÒ²¢É¾³ý¿ÕÐУ»È»ºóÓà sed G²åÈë¿ÕÐÐ
# triple space a file
#ʹһ¸öÎļþÖÐÿһÐж¼Õ¼ÓÃÈýÐпռä(¾ÍÊÇÔÚÿһÐкó±ß²åÁ½ÐпÕÐÐ)
sed 'G;G'
###²»ÓÃ˵Á˰ɣ¬Öظ´Á½´Îsed G.
# undo double-spacing (assumes even-numbered lines are always blank)
#³·ÏúÕ¼ÓÃÁ½ÐпռäµÄ%×÷(¼ÙÉèżÊýÐж¼Êǿհ×ÐÐ)
sed 'n;d'
###sed ÖÐÃüÁînµÄ½âÊÍΪRead¡¡the next line of input into the pattern space£®
###ËùÒÔÎÒÀí½âΪÓÃsed n ¶ÁÈëÏÂÒ»Ðбø½ô½Ó×ÅÓÃsed d ɾ³ý£¬Èç¹û¸ôÁ½ÐÐɾ³ýÒ»ÐÐÄÇô
###ÓÃsed 'n,n,d',ÒªÊǸô100ÐÐɾ³ýÒ»ÐÐÄØ....ʲô???!!!ÄãҪд100¸ön???!!!
# insert a blank line above every line which matches "regex"
#ÔÚÿ¸öº¬ÓÐ×Ö·û´®regexµÄÐÐÉϲåÈëÒ»Ðпհ×ÐÐ
sed '/regex/{x;p;x;}'
###sed ÖÐÃüÁîx½âÊÍΪExchange the contents of the hold and pattern spaces.
###ÎÒµÄÀí½âÒ²¾ÍÊǽ»»»±£Áô¿Õ¼äÓëģʽ¿Õ¼äµÄÄÚÈÝ
###sed ÖÐÃüÁîpΪPrint the current pattern space£®¾ÍÊÇ´òӡģʽ¿Õ¼äÖеÄÄÚÈÝ£®
###ËùÒÔÀí½âΪ±£Áô¿Õ¼äÖпªÊ¼Îª¿ÕÐУ¬Ä£Ê½¿Õ¼äÖо¹ýsed '/regex/'²éѯºóΪ°üº¬
###regexÄÚÈݵÄÄÇÒ»ÐУ¬1)x;½»»»Ä£Ê½¿Õ¼äºÍ±£Áô¿Õ¼äµÄÄÚÈÝ£¬´Ëʱģʽ¿Õ¼äÖÐÄÚÈÝ
###Ϊ¿ÕÐУ¬±£Áô¿Õ¼äÖÐÄÚÈÝΪº¬ÓÐregexÄÚÈݵÄÐУ¬ 2)p£»ÃüÁî´òӡģʽ¿Õ¼äÄÚÈÝ(
###¿ÕÐÐ)£¬ÔÚÔÎÄÖк¬ÓÐregexÄÚÈݵÄÄÇÒ»ÐеÄλÖóöÏÖÁ½ÐпÕÐУ¬ÆäÖкóÒ»ÐÐΪ
###ģʽ¿Õ¼äÖеÄÄÚÈÝ£¬3)x;ºó½»»»Ä£Ê½¿Õ¼äºÍ±£Áô¿Õ¼äÖеÄÄÚÈÝ£¬£®£®£®£®½á¹û¾ÍÊÇÔÚÔ
###À´³öÏÖregexµÄλÖÃǰһÐмÓÈëÁËÒ»ÐпÕÐС£
# insert a blank line below every line which matches "regex"
# ÔÚÿ¸öº¬ÓÐ×Ö·û´®regexµÄÐÐϲåÈëÒ»Ðпհ×ÐÐ
sed '/regex/G'
###±È½Ï¼òµ¥£¬²éÕÒºóÔÚºó±ß¼ÓÈëÒ»¿ÕÐÐ
# insert a blank line above and below every line which matches "regex"
#ÔÚÿ¸öº¬ÓÐ×Ö·û´®regexµÄÐÐÉÏ£¬Ï¸÷²åÈëÒ»Ðпհ×ÐÐ
sed '/regex/{x;p;x;G;}'
###ÐÖµÜÁ½¸ösed '/regex/G'ºÍsed '/regex/{x;p;x;}'ºÏ×÷µÄ½á¹û£®
NUMBERING:
# number each line of a file (simple left alignment) Using a tab (see
# note on '\t' at end of file)instead of space will preserve margins.
#¸øÎļþÿһÐмÓÉÏÊý×ÖÐòºÅ¡£ÓÃTABÖÆ±í·ûÌæ»»¿Õ¼äÀ´±£Áô¿Õ°×(?)
#(ÔÚÊý×ÖÐòºÅºÍÎı¾Öмä¼ÓÒ»TABÖÆ±í·û)
sed = filename | sed 'N;s/
/\t/'
###sed = filenameµÄ¹¦ÄÜÊÇ Print the current line number.
###µ«ÊÇÕâ¸ö¹¦ÄÜÊÇÔÚÿһÐÐÇ°ÃæÁí¼ÓÒ»ÐУ¬²¢ÇÒÏÔʾÐкÅ,¶ø²»ÊÇÖ±½ÓÔÚÐÐÊ×¼ÓÐòºÅ
###sedÖÐÃüÁîNµÄ½âÊÍΪAppend the next line of input into the pattern space.
###Ò²¾ÍÊǰѵ±Ç°ÐкóÒ»ÐеÄÄÚÈݼÓÔÚµ±Ç°Ðкó±ß£®
###sedÖÐÃüÁîs/regexp/replacement/½âÊÍΪAttempt to match regexp against the
###pattern space. If successful, replace that portion matched with
### replacement.´ó¸ÅÒâ˼ÊÇÔÚģʽ¿Õ¼äÍâÆ¥Åäregexp£¬Èç¹û³É¹¦£¬Ê¹ÓÃÆ¥Åäreplace
###mentµÄÄÚÈÝÌæ»»regexp.˵°×Á˾ÍÊDzéÕÒÌæ»»°É£®
ÊÇ»»Ðзû,\tÊÇTABÖÆ±í·û,
###ËùÒÔÕû¸öÃüÁîµÄÒâ˼Ҳ¾Í³öÀ´ÁË£®
# number each line of a file (nnumber on left, right-aligned)
#¸øÎļþÿһÐмÓÉÏÊý×ÖÐòºÅ(Êý×ÖÔÚ×ó±ß£¬ÏòÓÒ¶ÔÆë£¿)
sed = filename | sed 'N; s/^/ /; s/ *\(.\{6,\}\)
/\1 /'
### Ç°Ãæ²»ÓÃ˵ÁË£¬µ«ÊǺó±ß......
###s/ *\(.\{6,\}\)
/\1 /' Õâ¸öµØ·½È·Êµ²»ÊǺÜÃ÷°×!~~
# number each line of file, but only print numbers if line is not blank
#¸øÎļþÿһÐмÓÉÏÊý×ÖÐòºÅ£¬µ«Êǽöµ±ÐзǿÕʱ´òÓ¡Êý×Ö
sed '/./=' filename | sed '/./N; s/
/ /'
###sed '/./=' filenameµÄÓô¦ÊDzéÕÒ³ý·Ç¿ÕÐи³ÓèÐкÅ,sed '/./N; s/
/ /'²éÕÒ·Ç
##¿ÕÐв¢°ÑºóÒ»Ðи½¼Óµ½µ±Ç°ÐÐ,È»ºóÓÿոñÌæ»»»»Ðзû
# count lines (emulates "wc -l")
#ͳ¼ÆÐÐÊý(ÀàËÆÓÚ "wc -l")
sed -n '$='
#sedÖвÎÊýnµÄº¬ÒåÊÇsuppress automatic printing of pattern space,Ò²¾ÍÊÇÏÞÖÆ
###×Ô¶¯´òӡģʽ¿Õ¼äÖÐÄÚÈݵŦÄÜ£¬ '$='ÖÐ$µÄº¬ÒåÊÇMatch the last line£¬=ǰ±ß
###ÒѾ˵¹ýÁË£¬¾ÍÊÇ´òÓ¡Ðкţ¬ËùÒÔÆ¥Åä×îºóÒ»ÐжøÇÒÖ»´òÓ¡ÐкŲ»´òÓ¡ÄÚÈÝ£¬¾ÍÊÇ
###"wc -l"ÁË
TEXT CONVERSION AND SUBSTITUTION:
# IN UNIX ENVIRONMENT: convert DOS newlines (cR/LF)to Unix format
#ÔÚUNIX»·¾³Ï£º×ª»»DOS»»Ðзû(?)(cR/LF)UNIX¸ñʽ
sed 's/.$//' # assumes that all lines end with CR/LF
# ¼ÙÉèËùÓеÄÐж¼ÒÔCR/LF½áβ
###¿ÉÄÜÔÚDOSÖеÄASCIIÂë(°üÀ¨CR/LF)µ½ÁËUNIXÖж¼³ÉÁ˵¥×Ö·û°É£¬ÓÖÒòΪ".$"´ú±í
###ÿÐÐ×îºóÒ»¸ö×Ö·û£¬ËùÒÔ°ÑËüÃÇÌæ»»µô¾ÍOKÁË£®CR/LFÊÇɶ£¿CR---ASCII Carriage
###Return(ASCII »Ø³µ) ,LF----ASCII Linefeed (ASCII»»ÐÐ)
sed 's/^M$//' # in bash/tcsh, press Ctrl-V then Ctrl-M
#ÔÚbash/tcshÖУ¬°´ÏÂCtrl-VÈ»ºó°´ Ctrl-M
###ûɶ˵µÄ£¬¾ÍÊDzéÕÒÌæ»»£¬×¢ÒâÃüÁîÖÐ"^M"ÔÚÊäÈëʱһ¶¨Êǰ´ÏÂCtrl-VÈ»ºó°´ Ctrl-M
###Èç¹ûÊäÈë³Éctrl+6¼ü£¬È»ºóÊäÈëÒ»¸ö´óдM,Ê²Ã´Ìæ»»Ò²Íê³É²»ÁËÀ²£®
sed 's/\x0D$//' # gsed 3.02.80, but top script is easier
# ???
###²»ÊǺÜÁ˽⣡¸ßÊÖ˵һϰɣ¡
# IN UNIX ENVIRONMENT: convert Unix newlines (F)to DOS format
#ÔÚunix»·¾³ÖУº×ª»»Unix»»Ðзû(F)DOS¸ñʽ
sed "s/$/`echo -e \\\r`/" # command line under ksh
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡#ÔÚkshϵÄÃüÁîÐÐ
sed 's/$'"/`echo \\\r`/" # command line under bash
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ #ÔÚbashϵÄÃüÁîÐÐ
sed "s/$/`echo \\\r`/" # command line under zsh
#ÔÚzshϵÄÃüÁîÐÐ
sed 's/$/\r/' # gsed 3.02.80
¡¡¡¡¡¡¡¡¡¡¡¡¡¡# gsed3.02.80°æ±¾ÏµÄÃüÁîÐÐ
###ÒÔÉÏËĸöÃüÁîÊÇÔÚ²»Í¬µÄshell°æ±¾ÏÂÓÃ\r(ºÃÏó¾ÍÊÇASCIIÂëϵÄCR)Ìæ»»ÐÐβ
# IN DOS ENVIRONMENT: convert Unix newlines (F)to DOS format
#ÔÚDOS»·¾³ÏÂת»»Unix»»Ðзûµ½DOS¸ñʽ
sed "s/$//" # method 1
sed -n p # method 2
###Õâ¾äÓÖ²»ÊǺÜÁ˽⣬±¾À´$¾ÍÊÇÐÐβÁË£¬°ÑÐÐÎ²Ìæ»»³É¿Õ£¬ÄǾͱä³ÉÁËDOS¸ñʽÁËÂð£¿
###ϱßÒ»¾äÒ²ºÜÆæ¹Ö£¬²ÎÊý-nÊÇsuppress automatic printing of pattern space£¬Ãü
###ÁîpÊÇPrint the current pattern space£¬Ò»ÕýÒ»·´¾Í»»³ÉDOS¸ñʽÁË£¿¹Ô¹Ô~~
# IN DOS ENVIRONMENT: convert DOS newlines (cR/LF)to Unix format
#ÔÚDos»·¾³Ï£º×ª»»DOS»»ÐзûΪUNIX¸ñʽ
# Cannot be done with DOS versions of sed. Use "tr" instead.
#ÓÃDOS°æ±¾µÄsed²»ÄÜ×öµ½Õâµã£¬ÓÃ"tr"´úÌæ£®
tr -d \r <infile >outfile # GNU tr version 1.22 or higher
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡#GNU tr 1.22°æ±¾»òÕ߸ü¸ß°æ±¾
# delete leading whitespace (spaces, tabs)from front of each line
# aligns all text flush left
#ɾ³ýÿһÐпªÍ·µÄ¿Õ°×(¿Õ¸ñ£¬TAB)×ó¶ÔÆëÅÅÁÐÈ«ÎÄ£®
sed 's/^[ \t]*//' # see note on '\t' at end of file
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡# ???
### ÓÖÊÇÌæ»»³É¿Õ£¬^[ \t]* µÄº¬ÒåΪÒÔ¿Õ¸ñ»òÕßTAB¼ü¿ªÊ¼µÄ(»òÕßÊÇËûÃǵÄ×éºÏ)ÐУ®
# delete trailing whitespace (spaces, tabs)from end of each line
#´ÓÿһÐнáβ´¦É¾³ý×îºóµÄ¿Õ¸ñ(¿Õ¸ñ,TAB)
sed 's/[ \t]*$//' # see note on '\t' at end of file
#??
### ¸úÉϱߵÄÃüÁî"ǰºôºóÓµ"ѽ£®
# delete BOTH leading and trailing whitespace from each line
#ɾ³ýÿһÐеĿªÍ·ºÍ½áβµÄ¿Õ¸ñ
sed 's/^[ \t]*//;s/[ \t]*$//'
###Á½²½×ߣ®
# insert 5 blank spaces at beginning of each line (ake page offset)
#ÔÚÿһÐпªÊ¼´¦²åÈë5¸ö¿Õ¸ñ(ÕûÒ³Æ«ÒÆ)
sed 's/^/ /'
###ûɶ˵µÄ£®
# align all text flush right on a 79-column width
#ÓÒ¶ÔÆë£¬°´79ÁпíÅÅÁÐËùÓÐÎı¾
sed -e :a -e 's/^.\{1,78\}$/ &/;ta' # set at 78 plus 1 space
###Õâ¸öÓï¾äºÃÏñºÜÂé·³£¬²»¹ý¿´¶®ÁË»¹Í¦ÓÐÒâ˼£®£º£©
###Ê×ÏȳöÏÖÁ˼¸¸öж«¶«1.":" 2."&". 3. "-e " 4."t"£¬½âÊÍÒ»ÏÂ
###1.":" Label for b and t commands.(¸øbºÍtÃüÁî¼Ó×¢±êÇ©)
###2."&"¡¡±íÊ¾ÖØ¸´Õû¸öÆ¥ÅäµÄ¹æÔò±í´ïʽ£®
###3. "-e" add the script to the commands to be executed
### °Ñ½Å±¾¼Óµ½ÃüÁîÀïÓÃÒÔÖ´ÐÐ
###4. t label If a s/// has done a successful substitution since the last
###input line was read and since the last t or T command, then branch to
###label; if label is omitted, branch to end of script.
###Èç¹û´Ó¶ÁÈë×îºóÒ»¸öÊäÈëÐв¢ÇÒÖ´ÐÐ×îºóÒ»¸öt»òÕßTÃüÁîºó£¬Ò»¸ös///ÃüÁî³É¹¦Ìæ»»£¬
###ÄÇôÁ÷³Ì·ÖÖ§Ö¸Ïòlabel´¦£¬Èç¹ûlabel±»ºöÂÔ(¾ÍÊÇûÓгɹ¦Ìæ»»°É£¬ÎÒÏë),ÄÇôÁ÷³Ì
###·ÖÖ§Ö¸Ïò½Å±¾½áÊø£®
###»Ø¹ýÍ·À´¿´£¬Õû¸ösedÃüÁîÐÐÊÇÒ»¸öÑ»·Ö´ÐеÄÓï¾ä£¬Ã¿Ò»Ðж¼ÒªÌæ»»(78-µ±Ç°ÐеÄ×Ö
###·ûÊý)´Î,ËùÒÔÈç¹ûÕû¸öÎļþ±È½Ï´ó£¬»òÕßÒ»ÐÐ×Ö·ûÊý±È½ÏÉÙ£¬×öÕâ¸ö¶¯×÷¾ÍÓеã³ÔÁ¦ÁË£®
###²»ÐÅÄãÊÔÊÔ°É£¬ºÇºÇ£®
# center all text in the middle of 79-column width. In method 1,
# spaces at the beginning of the line are significant, and trailing
# spaces are appended at the end of the line. In method 2, spaces at
# the beginning of the line are discarded in centering the line, and
# no trailing spaces appear at the end of lines.
#ʹËùÓÐÎı¾¾ÓÓÚ79ÁпíµÄ¸ñʽÖÐÑë¡£ÔÚµÚÒ»ÖÖ·½·¨ÖУ¬Ã¿Ò»ÐпªÍ·´¦µÄ¿Õ¸ñÊÇ
#ºÜÖØÒªµÄ£¬×îºóµÄ¿Õ¸ñ±»¸½ÔÚÐÐβ¡£µÚ¶þÖÖ·½·¨ÖУ¬Ò»ÐпªÍ·µÄ¿Õ¸ñÔÚÖÐÐĶÔ
#ÆëµÄÐÐÖб»¶ªÆú£¬ÐÐβҲûÓÐÔÀ´½áβ´¦µÄ¿Õ¸ñ¡£
sed -e :a -e 's/^.\{1,77\}$/ & /;ta' # method 1
sed -e :a -e 's/^.\{1,77\}$/ &/;ta' -e 's/\(*\)1/\1/' # method 2
###¸úÉϱߵIJ¶à,µ±Á½±ß¶¼¼Ó¿Õ¸ñµÄʱºò£¬Ð§ÂÊÒª¸ßһЩ~~
# substitute (ind and replace)"foo" with "bar" on each line
#ÔÚÿһÐÐÖÐÓÃ"bar"Ìæ»»(ÕÒ²¢Ìæ»»)foo"
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
#Ìæ»»½ôÁÚ×îºóÒ»¸öÆ¥Åä³öÏÖµÄÖµ
###'s///---- The replacement may contain the special character & to refer to that
###portion of the pattern space which matched, and the special escapes \1
### through \9 to refer to the corresponding matching sub-expressions in the regexp.
###¾Í²»Ö±½Ó·ÒëÁË£¬´ó¸ÅÒâ˼¾ÍÊÇreplacement´¦¿ÉÒÔ°üº¬&´ú±íÆ¥ÅäµÄģʽ¿Õ¼äÖÐ
###µÄ²¿·Ö,ÌØÊâµÄ\1-\9¿ÉÒÔ´ú±íregexpÖÐÏàÓ¦µÄ"×Ó±í´ïʽ",Ò²¾ÍÊÇËµÇ°Ãæregexp
###¿ÉÒÔ·ÖΪ¼¸¸ö×Ó±í´ïʽ,¶øºó±ßreplacementÖпÉÒÔÓÃ\1-\9·Ö±ð´ú±íËüÃÇ.ÕâÑù¾Í
###Ôö¼ÓÁËÁé»îÐÔ£¬±ãÓÚÐÞ¸ÄsedÃüÁî.
###°ÑregexpÖеÄ\È¥µôºó£¬¾Í±ä³É(.*)foo(*foo),ÆäÖÐ(.*)±íʾÁã¸ö»òÕß¶à¸ö×Ö·û£¬
###ÕâÑù¼ÓÉϺó±ßµÄ\1bar\2¾Í±ä³ÉÁ˸ı䵹ÊýµÚ¶þ¸öfoo,¶øµ¹ÊýµÚÒ»¸ö²»±ä
sed 's/\(*\)foo/\1bar/' # replace only the last case
#Ö»Ìæ»»×îºóÒ»¸öÖµ
###±ÈÉÏÒ»¸ö¼òµ¥
# substitute "foo" with "bar" ONLY for lines which contain "baz"
#ÔÚÿһº¬ÓÐ"baz"µÄÐÐÖÐÓÃ"bar"Ìæ»»(²éÕÒ²¢Ìæ»»)foo"
sed '/baz/s/foo/bar/g'
### /baz/ÓÃÀ´²éÕÒ£¬ºó±ßµÄÓÃÀ´Ìæ»»
# substitute "foo" with "bar" EXCEPT for lines which contain "baz"
#ÔÚÿһ²»º¬ÓÐ"baz"µÄÐÐÖÐÓÃ"bar"Ìæ»»(ÕÒ²¢Ìæ»»)foo"
sed '/baz/!s/foo/bar/g'
###·´ÆäµÀ¶øÐÐÖ®£®
# change "scarlet" or "ruby" or "puce" to "red"
#½«"scarlet"»òÕß"ruby"»òÕß"puce"Ìæ»»³É"red"
sed 's/scarlet/red/g;s/ruby/red/g;s/puce/red/g' # most seds
#´ó¶àÊýsed¿ÉÓÃ
###Èý²½×ߣ®
gsed 's/scarlet\|ruby\|puce/red/g' # GNU sed only
#½öGNU sed¿ÉÓÃ
# reverse order of lines (emulates "tac")
#·´×ªÎÄÕÂÐеÄ˳Ðò(ÀàËÆ"tac" )
# bug/feature in HHsed v1.5 causes blank lines to be deleted
#???????
sed '1!G;h;$!d' # method 1
###
###Ê×ÏÈ¿´µÚÒ»¸öÃüÁî1!G£¬Õâ¸öÊÇɶÒâ˼?"!"±íʾºó±ßµÄÃüÁî¶ÔËùÓÐûÓÐ
###±»Ñ¡¶¨µÄÐз¢Éú×÷Óã¬GÄØ£¿»ñµÃ±£Áô¿Õ¼ä(רҵÃû´Ê½ÐÄڴ滺³åÇø?)ÖÐ
###µÄÄÚÈÝ£¬²¢×·¼Óµ½µ±Ç°Ä£Ê½¿Õ¼äµÄºóÃæ.1¾ÍÊÇÑ¡¶¨µÚÒ»ÐÐ.hµÄº¬ÒåÊÇ¿½±´
###ģʽ¿Õ¼äÄÚÈݵ½±£Áô¿Õ¼ä(Äڴ滺³åÇø)¡£ÄÇôÏÈ¿´ sed '1!G'ʲôº¬Òå
###Ö´ÐÐÒ»ÏÂÕâ¸öÃüÁ¼ÙÈôÎļþÊÇ
### $ cat test.txt
### 1
### 2
### 3
### 4
###ÄÇô sed '1!G' test.txtµÄ½á¹ûÊÇ
### $ sed '1!G' test.txt
### 1
### 2
###
### 3
###
### 4
###
### $
### Ò²¾ÍÊÇ˵³ýÁ˵ÚÒ»ÐÐ,ºó±ßÿÐж¼¼ÓÁË¿ÕÐÐ,ÕâÊÇÒòΪÄڴ滺³åÇøÖÐĬÈÏÖµ
###ÊÇ¿ÕÐаɡ£È»ºóÎÒÃǼÓÉÏh,¿´¿´·¢Éúʲô
### $ sed '1!G;h' test.txt
### 1
### 2
### 1
### 3
### 2
### 1
### 4
### 3
### 2
### 1
### $
### ¿ÕÐÐûÁË£¬Õ¦»ØÊÂ?ÎÒÊÇÕâÑùÀí½âµÄ£¬²»ÖªµÀ¶Ô²»¶Ô£¬´ó¼Ò°ïÖú¿´¿´£º£©
###Ê×ÏÈҪȷ¶¨£¬Ö´Ðе½Ã¿Ò»ÐУ¬sed°Ñµ±Ç°´¦ÀíµÄÐдæÔÚÁÙʱµÄ»º³åÇøÄÚ£¬
###³ÆÎªÄ£Ê½¿Õ¼ä(pattern space).Ò»µ©sedÍê³É¶Ôģʽ¿Õ¼äÖÐÐеĴ¦Àí£¬Ä£Ê½
###¿Õ¼äÖеÄÐоͱ»ËÍÍùÆÁÄ»£®Ðб»´¦ÀíÍê³Éºó£¬¾Í±»ÒƳöģʽ¿Õ¼ä£®£®£®
###
###ÃüÁîÖ´ÐеÚÒ»ÐÐʱ£¬ÓÉÓÚÆ¥ÅäÁ˵ÚÒ»ÐУ¬ËùÒÔ"!G"²»Æð×÷Óã¬Ö»´òÓ¡ÁË
###µÚÒ»ÐеÄÄÚÈÝ£¬È»ºó"h"°ÑÄ£°æ¿éÖеÄÄÚÈÝÒ²¾ÍÊǵÚÒ»ÐеÄÄÚÈÝ¿½±´½ø»º³åÇø£¬
###×¢Òâ´ËʱÊÇÓõÚÒ»ÐеÄÄÚÈÝÌæ»»¿ÕÐÐ.ģʽ¿Õ¼äÖеÄÄÚÈÝÒª´òÓ¡£¬ËùÒÔ³öÏÖ1.
###Ö´Ðе½µÚ¶þÐÐʱ£¬´òÓ¡µÚ¶þÐÐÄÚÈÝ£¬¶øÇÒÓÉÓÚ²»Æ¥Åä"1",ËùÒÔÔÚºó±ß"G"ÃüÁîÆð
###×÷ÓÃ,»ñµÃÁË»º³åÇøÖеĵÚÒ»ÐеÄÄÚÈÝ£¬È»ºó¼Óµ½µ±Ç°Ä£Ê½¿Õ¼äÖУ¬²¢´òÓ¡,³öÏÖ
###21¡£È»ºó°Ñģʽ¿Õ¼äÖеÄÄÚÈÝдÈ뻺³åÇø£¬Ò²¾ÍÊǰÑ21дÈ뻺³åÇø¡£Ö´Ðе½µÚÈýÐÐ
###Æ¥Åä²»³É¹¦,ËùÒÔ»º³åÇøµÄÄÚÈÝÓ¦¸ÃÊǵڶþÐеÄÄÚÈݼÓÉϵÚÒ»ÐеÄÄÚÈÝ£¬×·¼Óµ½Ä£
###ʽ¿Õ¼äµÄµÚÈýÐкó±ß£º321.È»ºó°Ñ321¿½±´µ½»º³åÇø£¬£®£®£®ÒÔ´ËÀàÍÆ¾Í³öÏÖÁËÉÏ
###ÃæµÄ½á¹û.
###ÎÒ²»ÖªµÀÕâô½âÊͶԲ»¶Ô£¬µ«Êǵ±ÎÒ°ÑÃüÁîÖеÄ1»»³É2£¬3£¬4ºóÖ´ÐУ¬µÃµ½ÁËÎÒ
###ÏëÏóµÄ½á¹û¡£»¹Çë¸ßÊÖÖ¸µã~~
###¼ÓÉÏ×îºóÒ»¾ä"$!d",ÄǾÍÊÇÇ°ÃæÈýÐеĽá¹ûɾ³ý£¬±£Áô×îºóÒ»ÐС£ÕâÑù¾ÍÐγÉÁË
### tacµÄЧ¹ûÀ²¡£
sed -n '1!G;h;$p' # method 2
###ÓëÉϱßÀàËÆµÄ£¬²»ÂÞàÂ!
# reverse each character on the line (emulates "rev")
#·´×ªÒ»ÐÐÖÐÿ¸ö×Ö·ûµÄ˳Ðò(ÀàËÆ"rev")
sed '/
/!G;s/\(.\)\(.*
\)/&\2\1/;//D;s/.//'
###Õâ¸öÃüÁîÕæÊÇ.....
###ÎÒÊÇÔÚ½âÊͲ»Í¨,ËùÒÔ°´ÕÕÎÒµÄÏë·¨À´ËµÒ»Ï°É,ÍêÈ«ÊÇϹ˵!
###'/
/!G'ÊÇÅжϱ¾ÐÐÊÇ·ñÓл»Ðзû,Èç¹ûûÓÐÖ´ÐÐGÃüÁî
###'s/\(.\)\(.*
\)/&\2\1/'ÃüÁîÊÇÔÚÔÀ´ÐÐ+µÚ¶þ¸ö×Ö·û(»òÕßûÓÐ)¿ªÊ¼µ½»»Ðзû+µÚÒ»¸ö×Ö·û
###//DÃüÁîÊÇÔÚģʽ¿Õ¼äɾ³ýµÚÒ»ÐÐ,×¢ÒâÖ´ÐÐÍê³ÉºóÈç¹ûģʽ¿Õ¼ä²»Îª¿Õ£¬¼ÌÐøÏÂÒ»¸ö
###Ñ»·Ö´ÐÐ.
###s/.//ÃüÁîÊÇɾ³ýµÚÒ»¸ö×Ö·û
###¼ÙÉèÒ»ÐÐÎÄ×ÖÊÇ 123
###ÄÇôִÐкóģʽ¿Õ¼äÖеÄÄÚÈÝÓ¦¸Ã°´Ï±ߵÄ˳Ðò±ä»¯
### 123
### 123
23
1
### 23
1
### 23
13
21
### 13
21
### 3
21
### 3
21
321
###
321
### 321
### ÎÒµÄÒÉÎʾÍÊÇ,ΪʲôµÚÒ»´ÎûÓÐÖ´ÐÐs/.//?!Èç¹ûÖ´ÐÐÁË,ÄÇô¾ÍµÃ²»µ½½á¹ûÁ˰¡!
### ¾È~~~~Ãü~~~°¡£¡????????????????????????????????
# join pairs of lines side-by-side (like "paste")
#°ÑÁ½ÐкÏΪһÐÐ(ÀàËÆÓÚ"paste")
sed '$!N;s/
/ /'
###Õâ¸öÃüÁî¸Ä³É sed 'N;s/
/ /'Ò»Ñù¿ÉÒԴﵽĿµÄ£¬²»ÖªÇ°Ãæ
###µÄ$!ÓÐʲôÓô¦...
# if a line ends with a backslash, append the next line to it
#Èç¹ûÒ»ÐÐÒÔ"\"½áÊø£¬°ÑÏÂÒ»ÐмÓÔÚ´ËÐÐÉÏ
sed -e :a -e '/\\$/N; s/\\
//; ta'
###Ñ»·%×÷£¬Á½´ÎÌæ»»¡£
# if a line begins with an equal sign, append it to the previous line
# and replace the "=" with a single space
#Èç¹ûÒ»µÈºÅ¿ªÊ¼Ä³Ò»ÐУ¬°ÑÕâÒ»Ðмӵ½Ç°Ò»Ðкó±ß£¬²¢ÇÒÓÃÒ»¸ö¿Õ¸ñÌæ»»µÈºÅ
sed -e :a -e '$!N;s/
=/ /;ta' -e 'P;D'
###ºÍÉϱ߲¶à£¬Òª×¢ÒâÁ½¸öеÄÃüÁî:
### PÃüÁî--Print up to the first embedded newline of the current
###pattern space.´òÓ¡µ±Ç°Ä£Ê½¿Õ¼äÖеÚÒ»ÐС£
###DÃüÁî--Delete up to the first embedded newline in
### the pattern space. Start next cycle, but skip reading from
###the input if there is still data in the pattern space.
###ɾ³ýµ±Ç°Ä£Ê½¿Õ¼äÖеÚÒ»ÐС£¿ªÊ¼ÐµÄÑ»·£¬µ«ÊÇÈç¹ûÔÚģʽ¿Õ¼äÖÐÈÔÈ»
###ÓÐÊý¾Ý£¬ÄÇÃ´Ìø¹ý¶ÁÈ¡ÊäÈë¡£
# add commas to numeric strings, changing "1234567" to "1,234,567"
#¸øÊý×Ö´®¼Ó¶ººÅ£¬°Ñ"1234567"±äΪ"1,234,567"
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
###(.*[0-9])±íʾÁã¸ö»òÕß¶à¸ö×Ö·û(¿ÉÄܰüº¬Êý×Ö)+Ò»¸öÊý×Ö,¶ø
###([0-9]{3})±íʾÈý¸öÊý×Ö,È»ºó²»Í£µÄÌæ»»,Ö±µ½Ìõ¼þ²»³ÉÁ¢,Ò²¾ÍÊÇûÓÐ
###ËĸöÒÔÉÏÁ¬ÐøµÄÊý×Ö³öÏÖ¾ÍÍ£Ö¹ÁË.
# add commas to numbers with decimal points and minus signs (NU sed)
#¸ø´øÓÐСÊýµãºÍ¸ººÅµÄÊý×ÖµÄÊý×Ö¼ÓÉ϶ººÅ
gsed ':a;s/\(^\|[^0-9.]\)\([0-9]\+\)\([0-9]\{3\}\)/\1\2,\3/g;ta'
###ûÓÐgsed£¬²»½âÊÍÁË
# add a blank line every 5 lines (after lines 5, 10, 15, 20, etc.)
#ÿÎåÐкó¼ÓÒ»¿ÕÐÐ
gsed '0~5G' # GNU sed only
sed 'n;n;n;n;G;' # other seds
###Ò»´óÔç¾Í˵¹ýÁ˵Ä...
SELECTIVE PRINTING OF CERTAIN LINES:
# print first 10 lines of file (emulates behavior of "head")
#´òÓ¡Ò»¸öÎļþµÄǰ10ÐÐ(Ä£·Â¶¯×÷"head")
sed 10q
# print first line of file (emulates "head -1")
#´òÓ¡Ò»¸öÎļþµÄµÚÒ»ÐÐ(·Â"head -1")
sed q
### qÃüÁîµÄ½âÊÍImmediately quit the sed script without processing
###any more input, except that if auto-print is not disabled the
###current pattern space will be printed.
### ËùÒÔÉϱßÁ½¸öÃüÁî¶¼Çå³þÁË£¬Ö´Ðе½µÚ10ÐÐÍ˳ö¾Í´òӡǰ10ÐУ¬Ö´ÐеÚÒ»ÐÐ
###¾ÍÍ˳ö¾Í´òÓ¡µÚÒ»ÐÐ
# print the last 10 lines of a file (emulates "tail")
#´òÓ¡Ò»¸öÎļþµÄºó10ÐÐ(·Â"tail")
sed -e :a -e '$q;N;11,$D;ba'
###Label b : Branch to label; if label is omitted, branch to end of script.
###ÃüÁîD ɾ³ýģʽ¿Õ¼äÄÚµÚÒ»¸ö newline ×Öĸ
ǰµÄ×ÊÁÏ¡£
###ÃüÁîN °ÑÊäÈëµÄÏÂÒ»ÐÐÌí¼Óµ½Ä£Ê½¿Õ¼äÖС£
### b label:·ÖÖ§µ½½Å±¾ÖдøÓбêºÅµÄµØ·½£¬Èç¹û±êºÅ²»´æ¾Í·ÖÖ§µ½½Å±¾µÄĩβ
###
waker дµ½:
ÊÔ×Åעһϣ¬²»ÖªµÀ¶Ô²»¶Ô
Èç¹ûÎÒÃÇÖ»¿´sed -e :a -e '$q;N;ba'
Õâ¸öÑ»·²»Í£µÄ¶ÁÈëÏ һÐÐÖ±µ½½á⣬ÕâÑùÕû¸öÎı¾¾ÍÐγÉÒ»¸öÓÉ
·Ö¸îµÄÁ´
ÏÖÔÚ¼ÓÉÏ11,$D
sed -e :a -e '$q;N;11,$D;ba'
Èç¹ûÎı¾²»³¬¹ý10ÐÐ
ģʽ¿Õ¼ä½«±£ÁôÕû¸öÎı¾´òÓ¡³öÀ´
Èç¹ûÎı¾´óÓÚ10ÐÐ
´ÓµÚ11ÐпªÊ¼£¬ÔÚÏÂÒ»ÐмÓÈëµ½Á´Öкó£¬Ä£Ê½¿Õ¼äµÚÒ»¸öÓÉ
·Ö¸îµÄ¼Ç¼½«±»É¾³ý£¬ÕâÑù¿´ÆðÀ´¾ÍÊÇÁ´Í·±»Á´Î²¼·³öÕû¸öÁ´£¬×ÜÊDZ£³Ö10¸öÁ´»·£¬Ñ»·½áÊøºó£¬Á´Öб£´æµÄ¾ÍÊÇÎļþµÄºó10ÐÐ,×îºóÓ¡³ö½á¹û
# print the last 2 lines of a file (emulates "tail -2")
#´òÓ¡Ò»¸öÎļþµÄ×îºóÁ½ÐÐ(·Â"tail -2")
sed '$!N;$!D'
### ¿ªÊ¼¿´²»Ì«¶®£¬³ÁËCU¾«»ªÒ»¶Î
###sed '$!N;$!D' : ¶ÔÎļþµ¹ÊýµÚ¶þÐÐÒÔǰµÄÐÐÀ´Ëµ£¬N ½«µ±Ç°ÐеÄÏÂÒ»Ðзŵ½Ä£
###ʽ¿Õ¼äÖÐÒÔºó£¬D ¾Í½«Ä£Ê½¿Õ¼äµÄÄÚÈÝɾ³ýÁË£»µ½µ¹ÊýµÚ¶þÐеÄʱºò£¬½«×îºóÒ»ÐÐ
###¸½¼Óµ½µ¹ÊýµÚ¶þÐÐÏÂÃæ£¬È»ºó×îºóÒ»Ðв»Ö´ÐÐ D £¬ËùÒÔÎļþµÄ×îºóÁ½Ðж¼±£´æÏÂÀ´ÁË¡£
###²»ÖªµÀÊÇÕâ¶Î»°ËµµÃÓÐЩº¬ºý£¬»¹ÊÇÎÒÀí½âµÃÓÐÆ«²î£¬×ܾõµÃDÃüÁî½âÊͳÉ
###"½«Ä£Ê½¿Õ¼äµÄÄÚÈÝɾ³ýÁË"ÓÐЩÈÃÈ˺ýÍ¿.
###¶øÎÒÊÇÕâÑùÀí½âµÄ£¬²»ÖªµÀ¶Ô²»¶Ô.Ê×ÏÈ˵DÃüÁîÊÇ Delete up to the first
###embedded newline in the pattern space.Ò²¾ÍÊÇ˵DÃüÁîÊÇɾ³ýģʽ¿Õ¼äÖÐ
###µÚÒ»¸ö»»Ðзû֮ǰµÄÄÚÈÝ£¬Ò²¾ÍÊÇɾ³ýµÚÒ»ÐÐ.È»ºóDÃüÁîµÄ½âÊÍ»¹ÓÐÒ»¾ä,ÎÒÈÏΪ
###Õâ¾äºÜÖØÒª: Start next cycle, but skip reading from the input if there
### is still data in the pattern space.¿ªÊ¼ÏÂÒ»¸öÑ»·£¬µ«ÊÇÈç¹ûģʽ¿Õ¼äÖÐÓÐ
###Êý¾Ý£¬ÔòÌø¹ý´ÓÊäÈëÖжÁÈ¡Êý¾Ý.
###¾ßÌåÔõô¹¤×÷ÄØ? ¼ÙÉèÎļþΪ
### $ cat test.txt
### 1
### 2
### 3
### 4
### 5
### ÄÇôµ±Ö´ÐеÚÒ»ÐÐʱ,$!N°ÑµÚ¶þÐмÓÈ뵽ģʽ¿Õ¼äÖеÚÒ»Ðкó±ß,È»ºó$!D°ÑµÚÒ»ÐÐ
###ÄÚÈÝɾ³ý£¬Ä£Ê½¿Õ¼äÖÐֻʣϵڶþÐеÄÄÚÈÝ.×¢Òâ,´ËʱÓÉÓÚDÃüÁʼÏÂÒ»¸öÑ»·£¬
###ËùÒÔ²»´òӡģʽ¿Õ¼äÖеÄÄÚÈÝ! (Õâ¸öµØ·½Ò²ÊÇÎÒÏëÁ˰ëÌì²ÅÕâô½âÊ͵ģ¬ÎÒÒ²ÖªµÀ
###ºÜ¿ÉÄܲ»¶Ô£¬»¶ÓÅÄש£¬ºÇºÇ)ÓÉÓÚDÃüÁîÒªÇóģʽ¿Õ¼äÖÐÓÐÊý¾ÝµÄ»°¾ÍÌø¹ý¶ÁÈ¡ÏÂÒ»ÐУ¬
###ËùÒÔ¼ÌÐøÏÂÒ»¸öÑ»·ÓÖµ½ÁË$!N£¬´Ëʱ¶ÁÈëµÚÈýÐмӵ½µÚ¶þÐкó±ß£¬....ÒÔ´ËÀàÍÆ¡£
###Ö´Ðе½¶ÁÈëµÚ5Ðи½¼ÓÔÚµÚËÄÐкó±ß£¬È»ºóÓÉÓÚ$!DµÃ²»µ½Ö´ÐУ¬ËùÒÔµÚ4Ðк͵Ú5ÐÐ
###¶¼±»±£Áô£¬ÃüÁî½áÊø£¬´òӡģʽ¿Õ¼ä...
# print the last line of a file (emulates "tail -1")
#´òÓ¡Ò»¸öÎļþµÄ×îºóÒ»ÐÐ(·Â"tail -1")
sed '$!d' # method 1
sed -n '$p' # method 2
###¹þ¹þ£¬ÖÕÓÚ¿´¶®ÁËÒ»¸ö£¬ÄãÒ²¿´¶®Á˰ɡ¡£º£©
# print only lines which match regular expression (emulates "grep")
#Ö»´òÓ¡Æ¥ÅäµÄÒ»¶¨×Ö·ûµÄÐÐ(·Â"grep")
sed -n '/regexp/p' # method 1
sed '/regexp/!d' # method 2
###Ã÷°×²ÎÊý-nºÍÃüÁîpºÍd¾ÍÃ÷°×ÕâÁ½¸öÃüÁ
# print only lines which do NOT match regexp (emulates "grep -v")
#Ö»´òÓ¡ÓÚÒ»¶¨×Ö·û²»Æ¥ÅäµÄÐÐ(Ч"grep -v")
sed -n '/regexp/!p' # method 1, corresponds to above
sed '/regexp/d' # method 2, simpler syntax
###ºÍÉϱßÏà·´£¬ÕýÈç×¢ÊÍËù˵£®
# print the line immediately before a regexp, but not the line
# containing the regexp
#´òÓ¡°üº¬"regexp"ÄÇÒ»ÐеÄÉÏÒ»ÐÐ,µ«ÊDz»´òÓ¡°üº¬"regexp"µÄÐÐ.
sed -n '/regexp/{g;1!p;};h'
###ÔÚÃüÁîÖ´Ðе½°üº¬"regexp"ÄÇÒ»ÐеÄÉÏÒ»ÐÐʱ,ģʽ¿Õ¼äÖÐÕâÐеÄÄÚÈݱ»
###¿½±´µ½±£Áô¿Õ¼äÖУ®Ö´Ðе½°üº¬"regexp"ÄÇÒ»ÐÐʱ¾Í´òÓ¡ËüÁË.
# print the line immediately after a regexp, but not the line
# containing the regexp
#´òÓ¡ÔÚ"regexp"Ö®ºó½ô¸úÄÇÒ»ÐУ¬µ«ÊdzýÈ¥°üº¬"regexp"µÄÐÐ.
sed -n '/regexp/{n;p;}'
###ÓëÉϱßÀàËÆ£¬±ÈÉϱ߼òµ¥£®
# print 1 line of context before and after regexp, with line number
# indicating where the regexp occurred (imilar to "grep -A1 -B1")
#ÔÚ"regexp"ǰºó´òÓ¡Ò»ÐÐÉÏÏÂÎÄ£¬Ê¹ÆäÐкÅָʾ"regexp"ÔÚÄÄÀï³öÏÖ(
#grep -A1 -B1ÏàËÆ)
sed -n -e '/regexp/{=;x;1!p;g;$!N;p;D;}' -e h
###¿´ÉÏÈ¥ºÃÏñͦ¸´ÔÓ£¬Æäʵµ¹ÊDz»ÄѽâÊÍ£®
###¼ÙÉèÎĵµÊÇÕâÑù
###$ cat test.txt
### 1 abc
### 2 cde
### 3 regexp
### 4 fgh
### 5 xyz
###ÃüÁîÖ´Ðе½regexpǰһÐУ¬ÒýºÅÀï±ßµÄÃüÁî²»Ö´ÐÐ,Ö»Ö´ÐÐhÃüÁîµÃµ½½á¹û
### command parttern space holdspace output
### Ö´Ðе½Ç°Ò»ÐÐ 2cde 2cde
### Ö´Ðе½regexpÐÐ "=" 3regexp 3
### "x" 2cde 3regexp
### "1!p" 2cde 3regexp 2cde
### "g" 3regexp 3regexp
### "$N" 3regexp 4fgh 3regexp
### "p" 3regexp 4fgh 3regexp 3regexp
### 4fgh
### "D" 4fgh 3regexp
### "h" 4fgh 4fgh
###
### ¿´Ò»ÏÂ×îÓұߵÄÊä³ö½á¹û£¬»¹²»´í°É£¡
# grep for AAA and BBB and CCC (n any order)
#²éÕÒ"AAA"ºÍ"BBB"ºÍ"CCC".(ÈÎÒâ˳Ðò)
sed '/AAA/!d; /BBB/!d; /CCC/!d'
# grep for AAA and BBB and CCC (n that order)
# ²éÕÒ"AAA"ºÍ"BBB"ºÍ"CCC".(Ò»¶¨Ë³Ðò)
sed '/AAA.*BBB.*CCC/!d'
# grep for AAA or BBB or CCC (emulates "egrep")
#²éÕÒ"AAA"»ò"BBB"»ò"CCC".(ÈÎÒâ˳Ðò)
sed -e '/AAA/b' -e '/BBB/b' -e '/CCC/b' -e d # most seds
gsed '/AAA\|BBB\|CCC/!d' # GNU sed only
###ÉϱßÈý¸öûʲô˵µÄ£¬¾ÍÊDzéÕÒ¹¦ÄÜߣ®
# print paragraph if it contains AAA (blank lines separate paragraphs)
# HHsed v1.5 must insert a 'G;' after 'x;' in the next 3 scripts below
#Èç¹ûij¶Î°üº¬"AAA",Ôò´òÓ¡ÕâÒ»¶Î¡£(¿ÕÐÐÓÃÀ´·Ö¸ô¶ÎÂä)
#HHsed v1.5±ØÐëÔÚ'x;'Ö®ºó²åÈëÒ»¸ö'G;'
sed -e '/./{H;$!d;}' -e 'x;/AAA/!d;'
###ǰ±ßÒ»²¿·ÖÃüÁîÓñ£Áô¿Õ¼äÀ´´æ´¢Õû¸ö¶ÎÂäÄÚÈÝ£¬ºó±ßÒ»¸öÃüÁîÓÃÀ´²éÕÒ
# print paragraph if it contains AAA and BBB and CCC (n any order)
#Èç¹ûij¶Î°üº¬"AAA"ºÍ"BBB"ºÍ"CCC",Ôò´òÓ¡ÕâÒ»¶Î
sed -e '/./{H;$!d;}' -e 'x;/AAA/!d;/BBB/!d;/CCC/!d'
###ͬÉÏ
# print paragraph if it contains AAA or BBB or CCC
# Èç¹ûij¶Î°üº¬"AAA"»ò"BBB"»ò"CCC",Ôò´òÓ¡ÕâÒ»¶Î
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
###ͬÉÏ
# print only lines of 65 characters or longer
#½ö´òÓ¡³¤ÓÚ65¸ö×Ö·ûµÄÐÐ
sed -n '/^.\{65\}/p'
###ÕâҲûʲôºÃ˵µÄ£¬ÕýÔò±í´ïʽµÄÔËÓã®
# print only lines of less than 65 characters
#½ö´òÓ¡ÉÙÓÚ65¸ö×Ö·ûµÄÐÐ
sed -n '/^.\{65\}/!p' # method 1, corresponds to above
sed '/^.\{65\}/d' # method 2, simpler syntax
###ÓÖûɶ°É
# print section of file from regular expression to end of file
#´òÓ¡´Ó×Ö·û"regexp"¿ªÊ¼µ½Îļþ½áÊøµÄ²¿·Ö
sed -n '/regexp/,$p'
###»¹Ã»É¶£¬×¢Òâ","µÄ×÷ÓÃÊÇÑ¡ÔñÐеķ¶Î§£¬´Ó°üº¬regexpµÄÐе½×îºóÒ»ÐÐ
# print section of file based on line numbers (ines 8-12, inclusive)
#¸ù¾ÝÐкÅÀ´´òÓ¡ÎļþµÄÒ»²¿·Ö(-12ÐУ¬°üÀ¨ÔÚÄÚ)
sed -n '8,12p' # method 1
sed '8,12!d' # method 2
# print line number 52
#´òÓ¡µÚ52ÐÐ
sed -n '52p' # method 1
sed '52!d' # method 2
sed '52q;d' # method 3, efficient on large files
###½ö×¢ÒâµÚÈýÖÖ·½·¨Ð§ÂʱȽϸ߾ÍÐÐÁË
# beginning at line 3, print every 7th line
#´ÓµÚÈýÐпªÊ¼£¬Ã¿7ÐдòÓ¡Ò»ÐÐ
gsed -n '3~7p' # GNU sed only
sed -n '3,${p;n;n;n;n;n;n;}' # other seds
###ºÃÏñºÜÈÝÒ×Àí½âÁ˰É
# print section of file between two regular expressions (nclusive)
#´òÓ¡ÎļþÖÐÖ¸¶¨×Ö·ûÖ®¼äµÄ²¿·Ö(º¬×Ö·ûÔÚÄÚ)
sed -n '/Iowa/,/Montana/p' # case sensitive
###ÏÖÔÚ¼òµ¥Á˰ɣ®£º£©
SELECTIVE DELETION OF CERTAIN LINES:
# print all of file EXCEPT section between 2 regular expressions
#´òÓ¡³ýÖ¸¶¨×Ö·ûÖ®¼ä²¿·ÖÖ®ÍâµÄÈ«ÎÄ
sed '/Iowa/,/Montana/d'
###ÓëÉϱßÏàËÆµÄ¼òµ¥
# delete duplicate, consecutive lines from a file (emulates "uniq")
# First line in a set of duplicate lines is kept, rest are deleted.
#ɾ³ýÎļþÖÐÖØ¸´µÄÁ¬ÐøµÄÐÐ(ËÆÓÚ"uniq"ÃüÁî)
#ÖØ¸´ÐÐÖеÚÒ»Ðб£Áô£¬ÆäËûɾ³ý
sed '$!N; /^\(.*\)
\1$/!P; D' ¡¡
###Èç¹û²»ÊÇ×îºóÒ»ÐУ¬¾Í°ÑÏÂÒ»Ðи½¼ÓÔÚģʽ¿Õ¼ä£¬È»ºó½øÐвéÕÒ%×÷
###"^"ºÍ"$"ÖмäµÄÄÚÈÝÈç¹ûÓÐÖØ¸´¾ÍÆ¥Åä³É¹¦£®Èç¹ûÆ¥Åä²»³É¹¦¾ÍÓÃP´òÓ¡
###µÚÒ»ÐУ®¡¡È»ºóɾ³ýµÚÒ»ÐУ®
# delete duplicate, nonconsecutive lines from a file. Beware not to
# overflow the buffer size of the hold space, or else use GNU sed.
#ɾ³ýÎļþÖÐÖØ¸´µÄ£¬µ«²»Á¬ÐøµÄÐС£×¢Òâ²»ÒªÒç³ö±£Áô¿Õ¼äµÄ»º³åÆ÷µÄ´óС£¬
#·ñÔòʹÓÃGNU sed.
sed -n 'G; s/
/&&/; /^\([ -~]*
\).*
\1/d; s/
//; h; P'
###ÔÚÎÒµÄlinux»·¾³Ö´Ðв»ÁË£¬³ö´íÊÇsed: -e expression #1, char 34:
###Invalid range end.ÊDz»ÊÇËùνµÄÒç³ö±£Áô¿Õ¼äµÄ´óСÁËÄØ£¿ÎÒÒ²²»µÃ¶øÖª£®
###´ó¼Ò²¹³ä°É£®!!?????????????????
# delete the first 10 lines of a file
#ɾ³ýÒ»¸öÎļþÖÐǰ10ÐÐ
sed '1,10d'
# delete the last line of a file
#ɾ³ýÒ»¸öÎļþÖÐ×îºó1ÐÐ
sed '$d'
###ÓëÉϱßÒ»¸ö¶¼ÊDzéÕÒɾ³ý
# delete the last 2 lines of a file
#ɾ³ýÒ»¸öÎļþÖÐ×îºó2ÐÐ
sed 'N;$!P;$!D;$d'
###Èç¹ûÀí½âÁËsed '$!N;$!D'ÊÇÈçºÎ¹¤×÷µÄ£¬Õâ¾ä»°Ò²²»ÔÚ»°Ï°ɣ¡
# delete the last 10 lines of a file
#ɾ³ýÒ»¸öÎļþÖкó10ÐÐ
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
###ºÍ´òÓ¡ºó10ÐÐÏàËÆ£®Ê²Ã´£¿´òÓ¡ºó10ÄǸöû¿´¶®? /shakehand £º£©
###?????????????????
# delete every 8th line
# ÿ8ÐÐɾ³ý1ÐÐ
gsed '0~8d' # GNU sed only
sed 'n;n;n;n;n;n;n;d;' # other seds
###û˵µÄ!
# delete ALL blank lines from a file (ame as "grep '.' ")
#ɾ³ýÎļþËùÓпհ×ÐÐ(ËÆÓÚ"grep '.' ")
sed '/^$/d' # method 1
sed '/./!d' # method 2
###ÕâÁ½¾ä¾ÍÊǸæËßÎÒÃÇ1.ÎÞÄÚÈݵÄɾ³ý,2.ÓÐÄÚÈݵı£Áô : )
# delete all CONSECUTIVE blank lines from file except the first; also
# deletes all blank lines from top and end of file (emulates "cat -s")
#ɾ³ýÎļþÖгýÒ»Ðпհ×ÐÐÖ®ÍâµÄËùÓÐÁ¬Ðø¿Õ°×ÐУ¬Ò²Í¬Ê±É¾³ýËùÓдÓÍ·µ½Î²µÄËù
#Óпհ×ÐÐ(ËÆÓÚ"cat -s")
sed '/./,/^$/!d' # method 1, allows 0 blanks at top, 1 at EOF
#·½·¨1²»ÔÊÐíÎļþ¶¥²¿ÓпÕÐУ¬Îļþβ²¿¿ÉÒÔ
sed '/^$/N;/
$/D' # method 2, allows 1 blank at top, 0 at EOF
#·½·¨2²»ÔÊÐíÎļþβ²¿ÓпÕÐУ¬Îļþ¶¥²¿¿ÉÒÔ
###Á½¸öÏÈÑ¡Ôñ£¬ºóɾ³ýÃüÁî.²»¶à˵ÁË.
# delete all CONSECUTIVE blank lines from file except the first 2:
#ɾ³ýÎļþÖÐÁ¬Ðø¿ÕÐÐÖгýǰÁ½Ðпհ×ÐÐÖ®ÍâµÄËùÓпհ×ÐÐ
sed '/^$/N;/
$/N;//D'
###¸úÉϱߵÄÃüÁîÏàËÆ£¬¶àÁËÒ»²½¶øÒÑ.
# delete all leading blank lines at top of file
#ɾ³ýÎļþ¿ªÍ·²¿·ÖÖеÄËùÓпհ×ÐÐ
sed '/./,$!d'
###´ÓÓÐ×Ö·û¿ªÊ¼µÄÐÐÖ±µ½×îºóÒ»Ðб£Áô£¬ÆäËûɾ³ý.
# delete all trailing blank lines at end of file
#ɾ³ýÎļþ½áβ²¿·ÖÖеÄËùÓпհ×ÐÐ
sed -e :a -e '/^
*$/{$d;N;ba' -e '}' # works on all seds
sed -e :a -e '/^
*$/N;/
$/ba' # ditto, except for gsed 3.02*
###²»ÐÐÁËÒªËÀÁË£¬»¹ÊǸßÊÖ˵°É£¬ÎÒÔÙ¿´ÏÂÈ¥»á·èµÄ£¡
###?????????????????????????????
# delete the last line of each paragraph
#ɾ³ýÿ¸ö¶ÎÂäÖÐ×îºó1ÐÐ
sed -n '/^$/{p;h;};/./{x;/./p;}'
###Ó¦¸ÃÊǼÙÉè¶ÎÂä¼äÓÿÕÐзָô
###ÃüÁîÖ´ÐÐʱ£¬Èç¹û²»ÊÇ¿ÕÐÐÄÇô½»»»Ä£Ê½¿Õ¼äºÍ±£Áô¿Õ¼ä£¬Èç¹û½»»»ºó
###ģʽ¿Õ¼ä²»Îª¿Õ£¬Ôò´òӡģʽ¿Õ¼äÖÐÄÚÈÝ£»Èç¹ûÊÇ¿ÕÐУ¬ÄÇô´òӡģʽ¿Õ¼ä
###¼äÖеÄÄÚÈÝ,Ò²¾ÍÊÇ´òÓ¡¿ÕÐÐ...ÒÔ´ËÀàÍÆ,³öÏÖ½á¹û.
###ÖÕÓÚÍêÁË£¬Ï±ߵÄÌØÊâÓ¦ÓÃûÓмÓ×¢£¬Ëæ±ã·ÒëÁËһϣ¬¿ÉÄܲ»¹»×¼È·£¬´ó¼Ò²Î¿¼Ò»Ï°É.
SPECIAL APPLICATIONS:
# remove nroff overstrikes (char, backspace)from man pages. The 'echo'
# command may need an -e switch if you use Unix System V or bash shell.
# ´Óman pageÒ³Àïɾ³ýËùÓÐoverstrikes(×Ö·û,backspace).Èç¹ûʹÓÃunixϵͳv
#»òÕßbash shell,echoÃüÁî¿ÉÄÜÐèÒª-e²ÎÊý.
sed "s/.`echo \\\b`//g" # double quotes required for Unix environment
#unix»·¾³ÏÂÐèҪ˫ÒýºÅ
sed 's/.^H//g' # in bash/tcsh, press Ctrl-V and then Ctrl-H
#ÔÚbash/tcshÖУ¬°´Ctrl-VÈ»ºó°´Ctrl-H
sed 's/.\x08//g' # hex expression for sed v1.5
#sed v1.5ÖеÄhex±í´ïʽ
# get Usenet/e-mail message header
# »ñµÃÐÂÎÅ×é/e-mailÐÅÏ¢µÄ±êÌⲿ·Ö
sed '/^$/q' # deletes everything after first blank line
# get Usenet/e-mail message body
#»ñµÃÐÂÎÅ×é/e-mailÐÅÏ¢µÄÖ÷Ì岿·Ö
sed '1,/^$/d' # deletes everything up to first blank line
# get Subject header, but remove initial "Subject: " portion
#»ñµÃÌâÄ¿µÄ±êÌ⣬µ«ÊÇɾȥ¿ªÊ¼µÄ"Subject: "²¿·Ö
sed '/^Subject: */!d; s///;q'
# get return address header
#»ñµÃ·µ»ØµÄµØÖ·±êÌâ()
sed '/^Reply-To:/q; /^From:/h; /./d;g;q'
# parse out the address proper. Pulls out the e-mail address by itself
# from the 1-line return address header (ee preceding script)
#ÕýÈ·½âÎöµØÖ·¡£°ÑemailµØÖ·´ÓÒ»ÐÐÖе¥¶ÀÌá³öÀ´²¢·µ»ØµØÖ·Í·()
sed 's/ *(*)/; s/>.*//; s/.*[:<] *//'
# add a leading angle bracket and space to each line (uote a message)
#¸øÃ¿ÐÐÔö¼ÓµÄ¼âÀ¨ºÅºÍ¿Õ¸ñ()ÐÅÏ¢±»ÒýÓÃ)
#sed 's/^/> /'
# delete leading angle bracket & space from each line (nquote a message)
#ɾ³ýÿÐеļâÀ¨ºÅºÍ¿Õ¸ñ()ÐÅÏ¢²»±»ÒýÓÃ)
sed 's/^> //'
# remove most HTML tags (ccommodates multiple-line tags)
#ɾȥ´ó²¿·ÖHTML±êÇ©(¹©¶àÐбêÇ©))
sed -e :a -e 's/<[^>]*>//g;/</N;//ba'
# extract multi-part un(?)encoded binaries, removing extraneous header
# info, so that only the uuencoded portion remains. Files passed to
# sed must be passed in the proper order. Version 1 can be entered
# from the command line; version 2 can be made into an executable
# Unix shell script. (odified from a script by Rahul Dhesi.)
#³éÈ¡¶à²¿·Öδ±àÂëµÄ¶þ½øÖÆ×Ö½Ú,ɾ³ýÎ޹صÄÍ·ÐÅÏ¢,ʹµÃÖ»±£Áôδ±àÂëµÄ²¿·Ö.
#Îļþ´«Ë͸øsed±ØÐë±£³ÖÕýÈ·µÄ˳Ðò¡£µÚÒ»°æ±¾¿ÉÒÔÓÃÓÚÃüÁîÐеÄÖ´ÐУ¬µÚ¶þ°æ±¾
#¿ÉÒÔÖÆ×÷³ÉÒ»¸ö¿ÉÖ´ÐеÄunix shell½Å±¾
sed '/^end/,/^begin/d' file1 file2 ... fileX | uudecode # vers. 1
sed '/^end/,/^begin/d' "$@" | uudecode # vers. 2
# setting the name of each .ZIP file to the basename of the .TXT file
# (under DOS: the "dir /b" switch returns bare filenames in all caps)
#¶ÀÁ¢µÄѹËõÿ¸ötxtÎļþ£¬É¾³ýÔÎļþ²¢ÇÒ¸ù¾øÔÎı¾ÎļþÉèÖÃÿ¸özipÎļþÃû¡£
echo @echo off >zipup.bat
dir /b *.txt | sed "s/^\(*\).TXT/pkzip -mo \1 \1.TXT/" >>zipup.bat

