-------------------------------------------------------------------------
SEDå•行è"šæœ¬å¿«é€Ÿå'考(Unix æµç¼-è¾'器)                       2005å¹´12月29æ-¥

英æ-‡æ ‡é¢˜ï¼šUSEFUL ONE-LINE SCRIPTS FOR SED (Unix stream editor)
åŽŸæ ‡é¢˜ï¼šHANDY ONE-LINERS FOR SED (Unix stream editor)

æ•´ç†ï¼šEric Pement  - ç"µé'®ï¼špemente[at]northpark[dot]edu         版本5.5
è¯'者:Joe Hong     - ç"µé'®ï¼šhq00e[at]126[dot]com

在以下地å€å¯æ‰¾åˆ°æœ¬æ-‡æ¡£çš"最æ-°ï¼ˆè‹±æ-‡ï¼‰ç‰ˆæœ¬ï¼š
   http://underpop.online.fr/s/sed/sed1line.txt
   http://www.pement.org/sed/sed1line.txt

å…¶ä»-语言版本:
  中æ-‡          - http://underpop.online.fr/s/sed/sed1line_zh-cn.html
  æ·å…‹è¯­        - http://underpop.online.fr/s/sed/sed1line_cz.html
  è·è¯­          - http://underpop.online.fr/s/sed/sed1line_nl.html
  法语          - http://underpop.online.fr/s/sed/sed1line_fr.html
  德语          - http://underpop.online.fr/s/sed/sed1line_de.html
  è'¡è¯­          - http://underpop.online.fr/s/sed/sed1line_pt-br.html

æ-‡æœ¬é-´éš":
--------

 # 在æ¯ä¸€è¡ŒåŽé¢å¢žåŠ ä¸€ç©ºè¡Œ
 sed G

 # 将原æ¥çš"æ‰€æœ‰ç©ºè¡Œåˆ é™¤å¹¶åœ¨æ¯ä¸€è¡ŒåŽé¢å¢žåŠ ä¸€ç©ºè¡Œã€'
 # è¿™æ ·åœ¨è¾"出çš"æ-‡æœ¬ä¸­æ¯ä¸€è¡ŒåŽé¢å°†æœ‰ä¸"åªæœ‰ä¸€ç©ºè¡Œã€'
 sed '/^$/d;G'

 # 在æ¯ä¸€è¡ŒåŽé¢å¢žåŠ ä¸¤è¡Œç©ºè¡Œ
 sed 'G;G'

 # 将第一个è"šæœ¬æ‰€äº§ç"Ÿçš"æ‰€æœ‰ç©ºè¡Œåˆ é™¤ï¼ˆå³åˆ é™¤æ‰€æœ‰å¶æ•°è¡Œï¼‰
 sed 'n;d'

 # 在匹é…弿 ·â€œregexâ€çš"è¡Œä¹‹å‰æ'入一空行
 sed '/regex/{x;p;x;}'

 # 在匹é…弿 ·â€œregexâ€çš"è¡Œä¹‹åŽæ'入一空行
 sed '/regex/G'

 # 在匹é…弿 ·â€œregexâ€çš"行之å‰å'Œä¹‹åŽå"æ'入一空行
 sed '/regex/{x;p;x;G;}'

ç¼-å·ï¼š
--------

 # 为æ-‡ä»¶ä¸­çš"æ¯ä¸€è¡Œè¿›è¡Œç¼-å·ï¼ˆç®€å•çš"左坹齿-¹å¼ï¼‰ã€'这里使ç"¨äº†â€œåˆ¶è¡¨ç¬¦â€
 # (tabï¼Œè§æœ¬æ-‡æœ«å°¾å…³äºŽ'\t'çš"ç"¨æ³•çš"æè¿°ï¼‰è€Œä¸æ˜¯ç©ºæ ¼æ¥å¯¹é½è¾¹ç¼˜ã€'
 sed = filename | sed 'N;s/\n/\t/'

 # 对æ-‡ä»¶ä¸­çš"所有行ç¼-å·ï¼ˆè¡Œå·åœ¨å·¦ï¼Œæ-‡å­-å³ç«¯å¯¹é½ï¼‰ã€'
 sed = filename | sed 'N; s/^/     /; s/ *\(.\{6,\}\)\n/\1  /'

 # 对æ-‡ä»¶ä¸­çš"所有行ç¼-å·ï¼Œä½†åªæ˜¾ç¤ºéžç©ºç™½è¡Œçš"行å·ã€'
 sed '/./=' filename | sed '/./N; s/\n/ /'

 # 计ç®-行数 (模拟 "wc -l")
 sed -n '$='

æ-‡æœ¬è½¬æ¢å'Œæ›¿ä»£ï¼š
--------

 # Unix环境:转æ¢DOSçš"æ-°è¡Œç¬¦ï¼ˆCR/LF)为Unixæ ¼å¼ã€'
 sed 's/.$//'                     # å‡è®¾æ‰€æœ‰è¡Œä»¥CR/LFç»"æŸ
 sed 's/^M$//'                    # 在bash/tcsh中,将按Ctrl-Mæ"¹ä¸ºæŒ‰Ctrl-V
 sed 's/\x0D$//'                  # ssedã€gsed 3.02.80ï¼ŒåŠæ›´é«˜ç‰ˆæœ¬

 # Unix环境:转æ¢Unixçš"æ-°è¡Œç¬¦ï¼ˆLF)为DOSæ ¼å¼ã€'
 sed "s/$/`echo -e \\\r`/"        # 在ksh下所使ç"¨çš"å'½ä»¤
 sed 's/$'"/`echo \\\r`/"         # 在bash下所使ç"¨çš"å'½ä»¤
 sed "s/$/`echo \\\r`/"           # 在zsh下所使ç"¨çš"å'½ä»¤
 sed 's/$/\r/'                    # gsed 3.02.80 åŠæ›´é«˜ç‰ˆæœ¬

 # DOS环境:转æ¢Unixæ-°è¡Œç¬¦ï¼ˆLF)为DOSæ ¼å¼ã€'
 sed "s/$//"                      # æ-¹æ³• 1
 sed -n p                         # æ-¹æ³• 2

 # DOS环境:转æ¢DOSæ-°è¡Œç¬¦ï¼ˆCR/LF)为Unixæ ¼å¼ã€'
 # 下é¢çš"è"šæœ¬åªå¯¹UnxUtils sed 4.0.7 åŠæ›´é«˜ç‰ˆæœ¬æœ‰æ•ˆã€'è¦è¯†åˆ«UnxUtils版本çš"
 #  sedå¯ä»¥é€šè¿‡å…¶ç‰¹æœ‰çš"“--textâ€é€‰é¡¹ã€'ä½ å¯ä»¥ä½¿ç"¨å¸®åŠ©é€‰é¡¹ï¼ˆâ€œ--helpâ€ï¼‰çœ‹
 # 其中有æ- 一个“--textâ€é¡¹ä»¥æ­¤æ¥åˆ¤æ-­æ‰€ä½¿ç"¨çš"æ˜¯å¦æ˜¯UnxUtils版本ã€'其它DOS
 # 版本çš"çš"sed则æ- 法进行这一转æ¢ã€'但å¯ä»¥ç"¨â€œtrâ€æ¥å®žçŽ°è¿™ä¸€è½¬æ¢ã€'
 sed "s/\r//" infile >outfile     # UnxUtils sed v4.0.7 æˆ-更高版本
 tr -d \r <infile >outfile        # GNU tr 1.22 æˆ-更高版本

 # å°†æ¯ä¸€è¡Œå‰å¯¼çš"“空白å­-符â€ï¼ˆç©ºæ ¼ï¼Œåˆ¶è¡¨ç¬¦ï¼‰åˆ 除
 # 使之左对é½
 sed 's/^[ \t]*//'                # è§æœ¬æ-‡æœ«å°¾å…³äºŽ'\t'ç"¨æ³•çš"æè¿°

 # å°†æ¯ä¸€è¡Œæ‹-å°¾çš"“空白å­-符â€ï¼ˆç©ºæ ¼ï¼Œåˆ¶è¡¨ç¬¦ï¼‰åˆ 除
 sed 's/[ \t]*$//'                # è§æœ¬æ-‡æœ«å°¾å…³äºŽ'\t'ç"¨æ³•çš"æè¿°

 # å°†æ¯ä¸€è¡Œä¸­çš"å‰å¯¼å'Œæ‹-å°¾çš"空白å­-ç¬¦åˆ é™¤
 sed 's/^[ \t]*//;s/[ \t]*$//'

 # 在æ¯ä¸€è¡Œå¼€å¤´å¤"æ'å…¥5ä¸ªç©ºæ ¼ï¼ˆä½¿å…¨æ-‡å'å³ç§»åЍ5个å­-符çš"ä½ç½®ï¼‰
 sed 's/^/     /'

 # 以79个å­-符为宽度,将所有æ-‡æœ¬å³å¯¹é½
 sed -e :a -e 's/^.\{1,78\}$/ &/;ta'  # 78个å­-符å¤-åŠ æœ€åŽçš"ä¸€ä¸ªç©ºæ ¼

 # 以79个å­-符为宽度,使所有æ-‡æœ¬å±…中ã€'在æ-¹æ³•1中,为了让æ-‡æœ¬å±…中æ¯ä¸€è¡Œçš"å‰
 # 头å'ŒåŽå¤´éƒ½å¡«å……äº†ç©ºæ ¼ã€' 在æ-¹æ³•2中,在居中æ-‡æœ¬çš"过程中åªåœ¨æ-‡æœ¬çš"å‰é¢å¡«å……
 # ç©ºæ ¼ï¼Œå¹¶ä¸"æœ€ç»ˆè¿™äº›ç©ºæ ¼å°†æœ‰ä¸€åŠä¼šè¢«åˆ 除ã€'æ­¤å¤-æ¯ä¸€è¡Œçš"åŽå¤´å¹¶æœªå¡«å……ç©ºæ ¼ã€'
 sed  -e :a -e 's/^.\{1,77\}$/ & /;ta'                     # æ-¹æ³•1
 sed  -e :a -e 's/^.\{1,77\}$/ &/;ta' -e 's/\( *\)\1/\1/'  # æ-¹æ³•2

 # 在æ¯ä¸€è¡Œä¸­æŸ¥æ‰¾å­-串“fooâ€ï¼Œå¹¶å°†æ‰¾åˆ°çš"“fooâ€æ›¿æ¢ä¸ºâ€œbarâ€
 sed 's/foo/bar/'                 # åªæ›¿æ¢æ¯ä¸€è¡Œä¸­çš"第一个“fooâ€å­-串
 sed 's/foo/bar/4'                # åªæ›¿æ¢æ¯ä¸€è¡Œä¸­çš"第四个“fooâ€å­-串
 sed 's/foo/bar/g'                # å°†æ¯ä¸€è¡Œä¸­çš"所有“fooâ€éƒ½æ¢æˆâ€œbarâ€
 sed 's/\(.*\)foo\(.*foo\)/\1bar\2/' # 替æ¢å€'数第二个“fooâ€
 sed 's/\(.*\)foo/\1bar/'            # æ›¿æ¢æœ€åŽä¸€ä¸ªâ€œfooâ€

 # åªåœ¨è¡Œä¸­å‡ºçްå­-串“bazâ€çš"情况下将“fooâ€æ›¿æ¢æˆâ€œbarâ€
 sed '/baz/s/foo/bar/g'

 # 将“fooâ€æ›¿æ¢æˆâ€œbarâ€ï¼Œå¹¶ä¸"åªåœ¨è¡Œä¸­æœªå‡ºçްå­-串“bazâ€çš"情况下替æ¢
 sed '/baz/!s/foo/bar/g'

 # ä¸ç®¡æ˜¯â€œscarletâ€â€œrubyâ€è¿˜æ˜¯â€œpuceâ€ï¼Œä¸€å¾‹æ¢æˆâ€œredâ€
 sed 's/scarlet/red/g;s/ruby/red/g;s/puce/red/g'  #对多数çš"sed都有效
 gsed 's/scarlet\|ruby\|puce/red/g'               # åªå¯¹GNU sed有效

 # å€'置所有行,第一行æˆä¸ºæœ€åŽä¸€è¡Œï¼Œä¾æ¬¡ç±»æŽ¨ï¼ˆæ¨¡æ‹Ÿâ€œtacâ€ï¼‰ã€'
 # ç"±äºŽæŸäº›åŽŸå› ï¼Œä½¿ç"¨ä¸‹é¢å'½ä»¤æ-¶HHsed v1.5会将æ-‡ä»¶ä¸­çš"ç©ºè¡Œåˆ é™¤
 sed '1!G;h;$!d'               # æ-¹æ³•1
 sed -n '1!G;h;$p'             # æ-¹æ³•2

 # 将行中çš"å­-ç¬¦é€†åºæŽ'åˆ-,第一个å­-æˆä¸ºæœ€åŽä¸€å­-,……(模拟“revâ€ï¼‰
 sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//'

 # å°†æ¯ä¸¤è¡Œè¿žæŽ¥æˆä¸€è¡Œï¼ˆç±»ä¼¼â€œpasteâ€ï¼‰
 sed '$!N;s/\n/ /'

 # å¦'æžœå½"å‰è¡Œä»¥åæ-œæ “\â€ç»"æŸï¼Œåˆ™å°†ä¸‹ä¸€è¡Œå¹¶åˆ°å½"å‰è¡Œæœ«å°¾
 # 并去掉原æ¥è¡Œå°¾çš"åæ-œæ 
 sed -e :a -e '/\\$/N; s/\\\n//; ta'

 # å¦'æžœå½"å‰è¡Œä»¥ç­‰å·å¼€å¤´ï¼Œå°†å½"å‰è¡Œå¹¶åˆ°ä¸Šä¸€è¡Œæœ«å°¾
 # 并以å•ä¸ªç©ºæ ¼ä»£æ›¿åŽŸæ¥è¡Œå¤´çš"“=â€
 sed -e :a -e '$!N;s/\n=/ /;ta' -e 'P;D'

 # 为数å­-å­-ä¸²å¢žåŠ é€-å·åˆ†éš"符å·ï¼Œå°†â€œ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'  # å…¶ä»-sed

 # ä¸ºå¸¦æœ‰å°æ•°ç'¹å'Œè´Ÿå·çš"æ•°å€¼å¢žåŠ é€-å·åˆ†éš"符(GNU sed)
 gsed -r ':a;s/(^|[^0-9.])([0-9]+)([0-9]{3})/\1\2,\3/g;ta'

 # 在æ¯5行åŽå¢žåŠ ä¸€ç©ºç™½è¡Œ (在第5,10,15,20,等行åŽå¢žåŠ ä¸€ç©ºç™½è¡Œï¼‰
 gsed '0~5G'                      # åªå¯¹GNU sed有效
 sed 'n;n;n;n;G;'                 # å…¶ä»-sed

选择性地显示特定行:
--------

 # 显示æ-‡ä»¶ä¸­çš"å‰10行 (模拟“headâ€çš"行为)
 sed 10q

 # 显示æ-‡ä»¶ä¸­çš"第一行 (模拟“head -1â€å'½ä»¤ï¼‰
 sed q

 # 显示æ-‡ä»¶ä¸­çš"最åŽ10行 (模拟“tailâ€ï¼‰
 sed -e :a -e '$q;N;11,$D;ba'

 # 显示æ-‡ä»¶ä¸­çš"最åŽ2行(模拟“tail -2â€å'½ä»¤ï¼‰
 sed '$!N;$!D'

 # 显示æ-‡ä»¶ä¸­çš"最åŽä¸€è¡Œï¼ˆæ¨¡æ‹Ÿâ€œtail -1â€ï¼‰
 sed '$!d'                        # æ-¹æ³•1
 sed -n '$p'                      # æ-¹æ³•2

 # 显示æ-‡ä»¶ä¸­çš"å€'数第二行
 sed -e '$!{h;d;}' -e x              # å½"æ-‡ä»¶ä¸­åªæœ‰ä¸€è¡Œæ-¶ï¼Œè¾"入空行
 sed -e '1{$q;}' -e '$!{h;d;}' -e x  # å½"æ-‡ä»¶ä¸­åªæœ‰ä¸€è¡Œæ-¶ï¼Œæ˜¾ç¤ºè¯¥è¡Œ
 sed -e '1{$d;}' -e '$!{h;d;}' -e x  # å½"æ-‡ä»¶ä¸­åªæœ‰ä¸€è¡Œæ-¶ï¼Œä¸è¾"出

 # åªæ˜¾ç¤ºåŒ¹é…正则表达å¼çš"行(模拟“grepâ€ï¼‰
 sed -n '/regexp/p'               # æ-¹æ³•1
 sed '/regexp/!d'                 # æ-¹æ³•2

 # åªæ˜¾ç¤ºâ€œä¸â€åŒ¹é…正则表达å¼çš"行(模拟“grep -vâ€ï¼‰
 sed -n '/regexp/!p'              # æ-¹æ³•1,与å‰é¢çš"å'½ä»¤ç›¸å¯¹åº"
 sed '/regexp/d'                  # æ-¹æ³•2,类似çš"语法

 # 查找“regexpâ€å¹¶å°†åŒ¹é…行çš"上一行显示出æ¥ï¼Œä½†å¹¶ä¸æ˜¾ç¤ºåŒ¹é…行
 sed -n '/regexp/{g;1!p;};h'

 # 查找“regexpâ€å¹¶å°†åŒ¹é…行çš"下一行显示出æ¥ï¼Œä½†å¹¶ä¸æ˜¾ç¤ºåŒ¹é…行
 sed -n '/regexp/{n;p;}'

 # 显示包å«â€œregexpâ€çš"行åŠå…¶å‰åŽè¡Œï¼Œå¹¶åœ¨ç¬¬ä¸€è¡Œä¹‹å‰åŠ ä¸Šâ€œregexpâ€æ‰€
 # 在行çš"è¡Œå· ï¼ˆç±»ä¼¼â€œgrep -A1 -B1â€ï¼‰
 sed -n -e '/regexp/{=;x;1!p;g;$!N;p;D;}' -e h

 # 显示包å«â€œAAAâ€ã€â€œBBBâ€æˆ-“CCCâ€çš"行(任æ"次åºï¼‰
 sed '/AAA/!d; /BBB/!d; /CCC/!d'  # å­-串çš"次åºä¸å½±å"ç»"æžœ

 # 显示包å«â€œAAAâ€ã€â€œBBBâ€å'Œâ€œCCCâ€çš"行(固定次åºï¼‰
 sed '/AAA.*BBB.*CCC/!d'

 # 显示包å«â€œAAAâ€â€œBBBâ€æˆ-“CCCâ€çš"行 (模拟“egrepâ€ï¼‰
 sed -e '/AAA/b' -e '/BBB/b' -e '/CCC/b' -e d    # 多数sed
 gsed '/AAA\|BBB\|CCC/!d'                        # 对GNU sed有效

 # 显示包å«â€œAAAâ€çš"æ®µè½ ï¼ˆæ®µè½é-´ä»¥ç©ºè¡Œåˆ†éš")
 # HHsed v1.5 必须在“x;â€åŽåŠ å…¥â€œG;â€ï¼ŒæŽ¥ä¸‹æ¥çš"3个è"šæœ¬éƒ½æ˜¯è¿™æ ·
 sed -e '/./{H;$!d;}' -e 'x;/AAA/!d;'

 # 显示包å«â€œAAAâ€â€œBBBâ€å'Œâ€œCCCâ€ä¸‰ä¸ªå­-串çš"æ®µè½ ï¼ˆä»»æ"次åºï¼‰
 sed -e '/./{H;$!d;}' -e 'x;/AAA/!d;/BBB/!d;/CCC/!d'

 # 显示包å«â€œ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有效

 # 显示包å«65个æˆ-以上å­-符çš"行
 sed -n '/^.\{65\}/p'

 # 显示包å«65个以下å­-符çš"行
 sed -n '/^.\{65\}/!p'            # æ-¹æ³•1,与上é¢çš"è"šæœ¬ç›¸å¯¹åº"
 sed '/^.\{65\}/d'                # æ-¹æ³•2,更简便一ç'¹çš"æ-¹æ³•

 # 显示部分æ-‡æœ¬â€"â€"ä»ŽåŒ…å«æ­£åˆ™è¡¨è¾¾å¼çš"行开始到最åŽä¸€è¡Œç»"æŸ
 sed -n '/regexp/,$p'

 # 显示部分æ-‡æœ¬â€"â€"指定行å·èŒƒå›´ï¼ˆä»Žç¬¬8至第12行,å«8å'Œ12行)
 sed -n '8,12p'                   # æ-¹æ³•1
 sed '8,12!d'                     # æ-¹æ³•2

 # 显示第52行
 sed -n '52p'                     # æ-¹æ³•1
 sed '52!d'                       # æ-¹æ³•2
 sed '52q;d'                      # æ-¹æ³•3, å¤"ç†å¤§æ-‡ä»¶æ-¶æ›´æœ‰æ•ˆçއ

 # 从第3行开始,æ¯7行显示一次    
 gsed -n '3~7p'                   # åªå¯¹GNU sed有效
 sed -n '3,${p;n;n;n;n;n;n;}'     # å…¶ä»-sed

 # 显示两个正则表达å¼ä¹‹é-´çš"æ-‡æœ¬ï¼ˆåŒ…å«ï¼‰
 sed -n '/Iowa/,/Montana/p'       # 区分大å°å†™æ-¹å¼

é€‰æ‹©æ€§åœ°åˆ é™¤ç‰¹å®šè¡Œï¼š
--------

 # 显示通篇æ-‡æ¡£ï¼Œé™¤äº†ä¸¤ä¸ªæ­£åˆ™è¡¨è¾¾å¼ä¹‹é-´çš"内容
 sed '/Iowa/,/Montana/d'

 # åˆ é™¤æ-‡ä»¶ä¸­ç›¸é'»çš"é‡å¤è¡Œï¼ˆæ¨¡æ‹Ÿâ€œuniqâ€ï¼‰
 # åªä¿ç•™é‡å¤è¡Œä¸­çš"第一行,其ä»-è¡Œåˆ é™¤
 sed '$!N; /^\(.*\)\n\1$/!P; D'

 # åˆ é™¤æ-‡ä»¶ä¸­çš"é‡å¤è¡Œï¼Œä¸ç®¡æœ‰æ- 相é'»ã€'注æ"hold space所能æ"¯æŒçš"ç¼"å­˜
 # 大å°ï¼Œæˆ-者使ç"¨GNU sedã€'
 sed -n 'G; s/\n/&&/; /^\([ -~]*\n\).*\n\1/d; s/\n//; h; P'

 # åˆ é™¤é™¤é‡å¤è¡Œå¤-çš"所有行(模拟“uniq -dâ€ï¼‰
 sed '$!N; s/^\(.*\)\n\1$/\1/; t; D'

 # åˆ é™¤æ-‡ä»¶ä¸­å¼€å¤´çš"10行
 sed '1,10d'

 # åˆ é™¤æ-‡ä»¶ä¸­çš"最åŽä¸€è¡Œ
 sed '$d'

 # åˆ é™¤æ-‡ä»¶ä¸­çš"最åŽä¸¤è¡Œ
 sed 'N;$!P;$!D;$d'

 # åˆ é™¤æ-‡ä»¶ä¸­çš"最åŽ10行
 sed -e :a -e '$d;N;2,10ba' -e 'P;D'   # æ-¹æ³•1
 sed -n -e :a -e '1,10!{P;N;D;};N;ba'  # æ-¹æ³•2

 # åˆ é™¤8çš"倿•°è¡Œ
 gsed '0~8d'                           # åªå¯¹GNU sed有效
 sed 'n;n;n;n;n;n;n;d;'                # å…¶ä»-sed

 # åˆ é™¤åŒ¹é…弿 ·çš"行
 sed '/pattern/d'                      # åˆ é™¤å«patternçš"行ã€'å½"ç"¶pattern
                                       # å¯ä»¥æ¢æˆä»»ä½•有效çš"正则表达å¼

 # åˆ é™¤æ-‡ä»¶ä¸­çš"所有空行(与“grep '.' â€æ•ˆæžœç›¸åŒï¼‰
 sed '/^$/d'                           # æ-¹æ³•1
 sed '/./!d'                           # æ-¹æ³•2

 # åªä¿ç•™å¤šä¸ªç›¸é'»ç©ºè¡Œçš"第一行ã€'å¹¶ä¸"åˆ é™¤æ-‡ä»¶é¡¶éƒ¨å'Œå°¾éƒ¨çš"空行ã€'
 # (模拟“cat -sâ€ï¼‰
 sed '/./,/^$/!d'        #æ-¹æ³•1ï¼Œåˆ é™¤æ-‡ä»¶é¡¶éƒ¨çš"空行,å…许尾部ä¿ç•™ä¸€ç©ºè¡Œ
 sed '/^$/N;/\n$/D'      #æ-¹æ³•2,å…许顶部ä¿ç•™ä¸€ç©ºè¡Œï¼Œå°¾éƒ¨ä¸ç•™ç©ºè¡Œ

 # åªä¿ç•™å¤šä¸ªç›¸é'»ç©ºè¡Œçš"å‰ä¸¤è¡Œã€'
 sed '/^$/N;/\n$/N;//D'

 # åˆ é™¤æ-‡ä»¶é¡¶éƒ¨çš"所有空行
 sed '/./,$!d'

 # åˆ é™¤æ-‡ä»¶å°¾éƒ¨çš"所有空行
 sed -e :a -e '/^\n*$/{$d;N;ba' -e '}'  # 对所有sed有效
 sed -e :a -e '/^\n*$/N;/\n$/ba'        # åŒä¸Šï¼Œä½†åªå¯¹ gsed 3.02.*有效

 # åˆ é™¤æ¯ä¸ªæ®µè½çš"最åŽä¸€è¡Œ
 sed -n '/^$/{p;h;};/./{x;/./p;}'

特殊åº"ç"¨ï¼š
--------

 # 移除手册页(man page)中çš"nroffæ ‡è®°ã€'在Unix System Væˆ-bash shell下使
 # ç"¨'echo'å'½ä»¤æ-¶å¯èƒ½éœ€è¦åŠ ä¸Š -e 选项ã€'
 sed "s/.`echo \\\b`//g"    # å¤-å±'çš"åŒæ‹¬å·æ˜¯å¿…é¡»çš"(Unix环境)
 sed 's/.^H//g'             # 在bashæˆ-tcsh中, 按 Ctrl-V 冿Œ‰ Ctrl-H
 sed 's/.\x08//g'           # sed 1.5,GNU sed,ssed所使ç"¨çš"å六进制çš"表示æ-¹æ³•

 # æå-æ-°é-»ç»"æˆ- e-mail çš"é'®ä»¶å¤´
 sed '/^$/q'                # åˆ é™¤ç¬¬ä¸€è¡Œç©ºè¡ŒåŽçš"所有内容

 # æå-æ-°é-»ç»"æˆ- e-mail çš"æ­£æ-‡éƒ¨åˆ†
 sed '1,/^$/d'              # åˆ é™¤ç¬¬ä¸€è¡Œç©ºè¡Œä¹‹å‰çš"所有内容

 # 从é'®ä»¶å¤´æå-“Subjectâ€ï¼ˆæ ‡é¢˜æ å­-段),并移除开头çš"“Subject:â€å­-æ ·
 sed '/^Subject: */!d; s///;q'

 # 从é'®ä»¶å¤´èŽ·å¾-回å¤åœ°å€
 sed '/^Reply-To:/q; /^From:/h; /./d;g;q'

 # 获å-é'®ä»¶åœ°å€ã€'在上一个è"šæœ¬æ‰€äº§ç"Ÿçš"é'£ä¸€è¡Œé'®ä»¶å¤´çš"基础上进一步çš"å°†éžç"µé'®
 # 地å€çš"部分剃除ã€'(è§ä¸Šä¸€è"šæœ¬ï¼‰
 sed 's/ *(.*)//; s/>.*//; s/.*[:<] *//'

 # 在æ¯ä¸€è¡Œå¼€å¤´åŠ ä¸Šä¸€ä¸ªå°-括å·å'Œç©ºæ ¼ï¼ˆå¼•ç"¨ä¿¡æ¯ï¼‰
 sed 's/^/> /'

 # å°†æ¯ä¸€è¡Œå¼€å¤´å¤"çš"å°-括å·å'Œç©ºæ ¼åˆ 除(解除引ç"¨ï¼‰
 sed 's/^> //'

 # 移除大部分çš"HTMLæ ‡ç­¾ï¼ˆåŒ…æ‹¬è·¨è¡Œæ ‡ç­¾ï¼‰
 sed -e :a -e 's/<[^>]*>//g;/</N;//ba'

 # 将分æˆå¤šå·çš"uuencodeæ-‡ä»¶è§£ç ã€'移除æ-‡ä»¶å¤´ä¿¡æ¯ï¼Œåªä¿ç•™uuencodeç¼-ç 部分ã€'
 # æ-‡ä»¶å¿…须以特定顺åºä¼ ç»™sedã€'下é¢ç¬¬ä¸€ç§ç‰ˆæœ¬çš"è"šæœ¬å¯ä»¥ç›´æŽ¥åœ¨å'½ä»¤è¡Œä¸‹è¾"入;
 # 第二ç§ç‰ˆæœ¬åˆ™å¯ä»¥æ"¾å…¥ä¸€ä¸ªå¸¦æ‰§è¡Œæƒé™çš"shellè"šæœ¬ä¸­ã€'(ç"±Rahul Dhesiçš"一
 # 个è"šæœ¬ä¿®æ"¹è€Œæ¥ã€')
 sed '/^end/,/^begin/d' file1 file2 ... fileX | uudecode   # vers. 1
 sed '/^end/,/^begin/d' "$@" | uudecode                    # vers. 2

 # å°†æ-‡ä»¶ä¸­çš"段è½ä»¥å­-æ¯é¡ºåºæŽ'åºã€'段è½é-´ä»¥ï¼ˆä¸€è¡Œæˆ-多行)空行分éš"ã€'GNU sed使ç"¨
 # å­-元“\vâ€æ¥è¡¨ç¤ºåž'直制表符,这里ç"¨å®ƒæ¥ä½œä¸ºæ¢è¡Œç¬¦çš"å ä½ç¬¦â€"â€"å½"ç"¶ä½ 也å¯ä»¥
 # ç"¨å…¶ä»-未在æ-‡ä»¶ä¸­ä½¿ç"¨çš"å­-符æ¥ä»£æ›¿å®ƒã€'
 sed '/./{H;d;};x;s/\n/={NL}=/g' file | sort | sed '1s/={NL}=//;s/={NL}=/\n/g'
 gsed '/./{H;d};x;y/\n/\v/' file | sort | sed '1s/\v//;y/\v/\n/'

 # 分别压缩æ¯ä¸ª.TXTæ-‡ä»¶ï¼ŒåŽ‹ç¼©åŽåˆ 除原æ¥çš"æ-‡ä»¶å¹¶å°†åŽ‹ç¼©åŽçš".ZIPæ-‡ä»¶
 # å'½å为与原æ¥ç›¸åŒçš"åå­-ï¼ˆåªæ˜¯æ‰©å±•åä¸åŒï¼‰ã€'(DOS环境:“dir /bâ€
 # 显示ä¸å¸¦è·¯å¾"çš"æ-‡ä»¶å)ã€'
 echo @echo off >zipup.bat
 dir /b *.txt | sed "s/^\(.*\)\.TXT/pkzip -mo \1 \1.TXT/" >>zipup.bat


使ç"¨SED:Sed接å-一个æˆ-多个ç¼-è¾'å'½ä»¤ï¼Œå¹¶ä¸"æ¯è¯»å…¥ä¸€è¡ŒåŽå°±ä¾æ¬¡åº"ç"¨è¿™äº›å'½ä»¤ã€'
å½"读入第一行è¾"å…¥åŽï¼Œsed对其åº"ç"¨æ‰€æœ‰çš"å'½ä»¤ï¼Œç"¶åŽå°†ç»"æžœè¾"出ã€'接ç€å†è¯»å…¥ç¬¬äºŒ
行è¾"入,对其åº"ç"¨æ‰€æœ‰çš"å'½ä»¤â€¦â€¦å¹¶é‡å¤è¿™ä¸ªè¿‡ç¨‹ã€'上一个例å­ä¸­sedç"±æ ‡å‡†è¾"入设
备(å³å'½ä»¤è§£é‡Šå™¨ï¼Œé€šå¸¸æ˜¯ä»¥ç®¡é"è¾"å…¥çš"å½¢å¼ï¼‰èŽ·å¾-è¾"å…¥ã€'在å'½ä»¤è¡Œç»™å‡ºä¸€ä¸ªæˆ-多
个æ-‡ä»¶å作为å'æ•°æ-¶ï¼Œè¿™äº›æ-‡ä»¶å-ä»£æ ‡å‡†è¾"入设备æˆä¸ºsedçš"è¾"å…¥ã€'sedçš"è¾"出将被
é€åˆ°æ ‡å‡†è¾"出(显示器)ã€'å› æ­¤ï¼š

 cat filename | sed '10q'         # 使ç"¨ç®¡é"è¾"å…¥
 sed '10q' filename               # åŒæ ·æ•ˆæžœï¼Œä½†ä¸ä½¿ç"¨ç®¡é"è¾"å…¥
 sed '10q' filename > newfile     # å°†è¾"出转移(é‡å®šå')到ç£ç›˜ä¸Š

è¦äº†è§£sedå'½ä»¤çš"使ç"¨è¯´æ˜Žï¼ŒåŒ…括å¦'何通过è"šæœ¬æ-‡ä»¶ï¼ˆè€Œéžä»Žå'½ä»¤è¡Œï¼‰æ¥ä½¿ç"¨è¿™äº›å'½
令,请å'阅《sed & awk》第二版,作者Dale Doughertyå'ŒArnold Robbins
(O'Reilly,1997;http://www.ora.com),《UNIX Text Processing》,作者
Dale Doughertyå'ŒTim O'Reilly(Hayden Books,1987)æˆ-者是Mike Arst写çš"æ•™
程â€"â€"压缩包çš"å称是“U-SEDIT2.ZIPâ€ï¼ˆåœ¨è®¸å¤šç«™ç'¹ä¸Šéƒ½æ‰¾å¾-到)ã€'è¦å'掘sed
çš"潜力,则必须对“正则表达å¼â€æœ‰è¶³å¤Ÿçš"ç†è§£ã€'正则表达å¼çš"èµ"æ-™å¯ä»¥çœ‹
《Mastering Regular Expressions》作者Jeffrey Friedl(O'reilly 1997)ã€'
Unix系统所æä¾›çš"手册页(“manâ€ï¼‰ä¹Ÿä¼šæœ‰æ‰€å¸®åŠ©ï¼ˆè¯•ä¸€ä¸‹è¿™äº›å'½ä»¤
“man sedâ€ã€â€œman regexpâ€ï¼Œæˆ-者看“man edâ€ä¸­å…³äºŽæ­£åˆ™è¡¨è¾¾å¼çš"部分),但
手册æä¾›çš"ä¿¡æ¯æ¯"较“抽象â€â€"â€"这也是它一直为人所诟ç-…çš"ã€'ä¸è¿‡ï¼Œå®ƒæœ¬æ¥å°±ä¸
是ç"¨æ¥æ•™åˆå­¦è€…å¦'何使ç"¨sedæˆ-正则表达å¼çš"æ•™æï¼Œè€Œåªæ˜¯ä¸ºé'£äº›ç†Ÿæ'‰è¿™äº›å·¥å…·çš"人
æä¾›çš"一些æ-‡æœ¬å'考ã€'

括å·è¯­æ³•:å‰é¢çš"例å­å¯¹sedå'½ä»¤åŸºæœ¬ä¸Šéƒ½ä½¿ç"¨å•引å·ï¼ˆ'...')而éžåŒå¼•å·
("..."ï¼‰è¿™æ˜¯å› ä¸ºsed通常是在Unixå¹³å°ä¸Šä½¿ç"¨ã€'å•引å·ä¸‹ï¼ŒUnixçš"shell(å'½ä»¤
解释器)ä¸ä¼šå¯¹ç¾Žå…ƒç¬¦ï¼ˆ$)å'ŒåŽå¼•å·ï¼ˆ`...`)进行解释å'Œæ‰§è¡Œã€'而在åŒå¼•å·ä¸‹
美元符会被展开为å˜é‡æˆ-å'æ•°çš"值,åŽå¼•å·ä¸­çš"å'½ä»¤è¢«æ‰§è¡Œå¹¶ä»¥è¾"出çš"ç»"果代替
åŽå¼•å·ä¸­çš"内容ã€'而在“cshâ€åŠå…¶è¡ç"Ÿçš"shell中使ç"¨æ"Ÿå¹å·ï¼ˆ!)æ-¶éœ€è¦åœ¨å…¶å‰
é¢åŠ ä¸Šè½¬ä¹‰ç"¨çš"åæ-œæ (就åƒè¿™æ ·ï¼š\!)以ä¿è¯ä¸Šé¢æ‰€ä½¿ç"¨çš"例å­èƒ½æ­£å¸¸è¿è¡Œ
(包括使ç"¨å•引å·çš"情况下)ã€'DOS版本çš"Sed则一律使ç"¨åŒå¼•å·ï¼ˆ"..."ï¼‰è€Œä¸æ˜¯
引巿¥åœˆèµ·å'½ä»¤ã€'

'\t'çš"ç"¨æ³•:为了使本æ-‡ä¿æŒè¡Œæ-‡ç®€æ´ï¼Œæˆ'们在è"šæœ¬ä¸­ä½¿ç"¨'\t'æ¥è¡¨ç¤ºä¸€ä¸ªåˆ¶è¡¨
符ã€'但是现在大部分版本çš"sed还ä¸èƒ½è¯†åˆ«'\t'çš"简写æ-¹å¼ï¼Œå› æ­¤å½"在å'½ä»¤è¡Œä¸­ä¸º
è"šæœ¬è¾"入制表符æ-¶ï¼Œä½ åº"该直接按TABé"®æ¥è¾"å…¥åˆ¶è¡¨ç¬¦è€Œä¸æ˜¯è¾"å…¥'\t'ã€'下åˆ-çš"å·¥
具软件都æ"¯æŒ'\t'åšä¸ºä¸€ä¸ªæ­£åˆ™è¡¨è¾¾å¼çš"å­-å…ƒæ¥è¡¨ç¤ºåˆ¶è¡¨ç¬¦ï¼šawkã€perlã€HHsedã€
sedmod以åŠGNU sed v3.02.80ã€'

ä¸åŒç‰ˆæœ¬çš"SED:ä¸åŒçš"版本é-´çš"sed会有些ä¸åŒä¹‹å¤",å¯ä»¥æƒ³è±¡å®ƒä»¬ä¹‹é-´åœ¨è¯­æ³•上
会有差å¼'ã€'å…·ä½"è€Œè¨€ï¼Œå®ƒä»¬ä¸­å¤§éƒ¨åˆ†ä¸æ"¯æŒåœ¨ç¼-è¾'å'½ä»¤ä¸­é-´ä½¿ç"¨æ ‡ç­¾ï¼ˆ:name)æˆ-分
æ"¯å'½ä»¤ï¼ˆb,tï¼‰ï¼Œé™¤éžæ˜¯æ"¾åœ¨é'£äº›çš"末尾ã€'这篇æ-‡æ¡£ä¸­æˆ'们尽é‡é€‰ç"¨äº†å¯ç§»æ¤æ€§è¾ƒé«˜
çš"语法,以使大多数版本çš"sedçš"ç"¨æˆ·éƒ½èƒ½ä½¿ç"¨è¿™äº›è"šæœ¬ã€'ä¸è¿‡GNU版本çš"sedå…许使
ç"¨æ›´ç®€æ´çš"语法ã€'想åƒä¸€ä¸‹å½"读者看到一个很长çš"å'½ä»¤æ-¶çš"心情:

   sed -e '/AAA/b' -e '/BBB/b' -e '/CCC/b' -e d

å¥½æ¶ˆæ¯æ˜¯GNU sed能让å'½ä»¤æ›´ç´§å‡':

   sed '/AAA/b;/BBB/b;/CCC/b;d'      # ç"šè‡³å¯ä»¥å†™æˆ
   sed '/AAA\|BBB\|CCC/b;d'

æ­¤å¤-,请注æ"虽ç"¶è®¸å¤šç‰ˆæœ¬çš"sed接å-象“/one/ s/RE1/RE2/â€è¿™ç§åœ¨'s'å‰å¸¦æœ‰ç©º
æ ¼çš"å'½ä»¤ï¼Œä½†è¿™äº›ç‰ˆæœ¬ä¸­æœ‰äº›å´ä¸æŽ¥å-è¿™æ ·çš"å'½ä»¤:“/one/! s/RE1/RE2/â€ã€'è¿™æ-¶
åªéœ€è¦æŠŠä¸­é-´çš"ç©ºæ ¼åŽ»æŽ‰å°±è¡Œäº†ã€'

速度优åŒ-:å½"ç"±äºŽæŸç§åŽŸå› ï¼ˆæ¯"å¦'è¾"å…¥æ-‡ä»¶è¾ƒå¤§ã€å¤"ç†å™¨æˆ-ç¡¬ç›˜è¾ƒæ…¢ç­‰ï¼‰éœ€è¦æé«˜
å'½ä»¤æ‰§è¡Œé€Ÿåº¦æ-¶ï¼Œå¯ä»¥è€ƒè™'在替æ¢å'½ä»¤ï¼ˆâ€œs/.../.../â€ï¼‰å‰é¢åŠ ä¸Šåœ°å€è¡¨è¾¾å¼æ¥
æé«˜é€Ÿåº¦ã€'举例æ¥è¯´ï¼š

   sed 's/foo/bar/g' filename         # æ ‡å‡†æ›¿æ¢å'½ä»¤
   sed '/foo/ s/foo/bar/g' filename   # 速度更快
   sed '/foo/ s//bar/g' filename      # 简写形å¼

å½"åªéœ€è¦æ˜¾ç¤ºæ-‡ä»¶çš"å‰é¢çš"部分æˆ-需è¦åˆ 除åŽé¢çš"内容æ-¶ï¼Œå¯ä»¥åœ¨è"šæœ¬ä¸­ä½¿ç"¨â€œqâ€
å'½ä»¤ï¼ˆé€€å‡ºå'½ä»¤ï¼‰ã€'在å¤"ç†å¤§çš"æ-‡ä»¶æ-¶ï¼Œè¿™ä¼šèŠ'çœå¤§é‡æ-¶é-´ã€'å› æ­¤ï¼š

   sed -n '45,50p' filename           # 显示第45到50行
   sed -n '51q;45,50p' filename       # ä¸€æ ·ï¼Œä½†å¿«å¾-多

å¦'æžœä½ æœ‰å…¶ä»-çš"å•行è"šæœ¬æƒ³ä¸Žå¤§å®¶åˆ†äº«æˆ-è€…ä½ å'现了本æ-‡æ¡£ä¸­é"™è¯¯çš"地æ-¹ï¼Œè¯·å'ç"µ
å­é'®ä»¶ç»™æœ¬æ-‡æ¡£çš"作者(Eric Pement)ã€'é'®ä»¶ä¸­è¯·è®°å¾-æä¾›ä½ 所使ç"¨çš"sed版本〠
该sed所è¿è¡Œçš"æ"作系统åŠå¯¹é-®é¢˜çš"é€'å½"æè¿°ã€'本æ-‡æ‰€æŒ‡çš"å•行è"šæœ¬æŒ‡å'½ä»¤è¡Œçš"é•¿
度在65个å­-符æˆ-65个以下çš"sedè"šæœ¬ã€"è¯'注1〕ã€'本æ-‡æ¡£çš"å"ç§è"šæœ¬æ˜¯ç"±ä»¥ä¸‹æ‰€åˆ-作
者所写æˆ-æä¾›ï¼š

 Al Aab                               # 建立了“sedersâ€é'®ä»¶åˆ-表
 Edgar Allen                          # 许多æ-¹é¢
 Yiorgos Adamopoulos                  # 许多æ-¹é¢
 Dale Dougherty                       # 《sed & awk》作者
 Carlos Duarte                        # 《do it with sed》作者
 Eric Pement                          # 本æ-‡æ¡£çš"作者
 Ken Pizzini                          # GNU sed v3.02 çš"作者
 S.G. Ravenhall                       # 去htmlæ ‡ç­¾è"šæœ¬
 Greg Ubben                           # 有诸多贡献并æä¾›äº†è®¸å¤šå¸®åŠ©
-------------------------------------------------------------------------

è¯'注1:大部分情况下,sedè"šæœ¬æ- 论多长都能写æˆå•行çš"å½¢å¼ï¼ˆé€šè¿‡`-e'选项å'Œ`;'
å·ï¼‰â€"â€"åªè¦å'½ä»¤è§£é‡Šå™¨æ"¯æŒï¼Œæ‰€ä»¥è¿™é‡Œè¯´çš"å•行è"šæœ¬é™¤äº†èƒ½å†™æˆä¸€è¡Œè¿˜å¯¹é•¿åº¦æœ‰
所é™åˆ¶ã€'å› ä¸ºè¿™äº›å•行è"šæœ¬çš"æ"义ä¸åœ¨äºŽå®ƒä»¬æ˜¯ä»¥å•行çš"å½¢å¼å‡ºçްã€'而是让ç"¨æˆ·èƒ½
æ-¹ä¾¿åœ°åœ¨å'½ä»¤è¡Œä¸­ä½¿ç"¨è¿™äº›ç´§å‡'çš"è"šæœ¬æ‰æ˜¯å…¶æ"义所在ã€'

Valid XHTML 1.0 Strict