sed -n '/pattern/=' filename
,-n 選項只列印行號,不列印檔案內容。
[dywang@dywmac zzz]$ grep -n '[nb]zip' /etc/man.config 136:.gz /usr/bin/gunzip -c 137:.bz2 /usr/bin/bzip2 -c -d [dywang@dywmac zzz]$ sed -n '/[nb]zip/=' /etc/man.config 136 137
sed -n '/pattern/d' filename
,刪除 ssh 遠端連線紀錄檔中 IP 為 192.168.122.0/24 的紀錄,sed 沒有加 -i 選項不會真的刪除檔案中的內容,只是螢幕輸出中刪除。
[dywang@dywmac ~]$ sed '/192\.168\.122\.[0-9]\{1,3\}/d' .ssh/known_hosts \ | grep 192.168.122 --color
\(patternN\)
,可用 \N
將其放置取代結果。
sed 's/\(pattern1\)...\(pattern2\)/\2\1/g' [dywang@dywmac zzz]$ echo 'AxB' | sed 's/\([A-Z]\)x\([A-Z]\)/\2--\1/g' B--A [dywang@dywmac zzz]$ echo 'DxU' | sed 's/\([A-Z]\)x\([A-Z]\)/\2--\1/g' U--D
+ - * /
的取代,使用雙引號時,減號要使用兩個反斜線跳脫。
[dywang@deyu moodle]$ echo '+-*/+-*/' | sed "s/\([+\\-*/]\)/\1A/g" sed: -e expression #1, char 19: Invalid range end [dywang@deyu moodle]$ echo '+-*/+-*/' | sed "s/\([+*/\\-]\)/\1A/g" +A-A*A/A+A-A*A/A
+ - * /
的取代,使用單引號時,減號就可以使用一個反斜線跳脫。
[dywang@dywIssd zzz]$ echo '+-*/+-*/' | sed 's/\([+*/\\-]\)/\1A/g' +A-A*A/A+A-A*A/A [dywang@dywIssd zzz]$ echo '+-*/+-*/' | sed 's/\([+*/\-]\)/\1A/g' +A-A*A/A+A-A*A/A
(a,b,x)
取代成 axb=
。
[dywang@dywmac zzz]$ echo '(23,10,+)' | sed 's|(\([0-9]*\),\([0-9]*\),\([+*/\-]\))|\1\3\2=|g' 23+10=