g 表示行內(nèi)全面替換。
p 表示打印行。
w 表示把行寫入一個文件。
x 表示互換模板塊中的文本和緩沖區(qū)中的文本。
y 表示把一個字符翻譯為另外的字符(但是不用于正則表達式)
\1 子串匹配標記
& 已匹配字符串標記
^匹配行開始,如:/^sed/匹配所有以sed開頭的行。
$匹配行結束,如:/sed$/匹配所有以sed結尾的行。
. 匹配一個非換行符的任意字符,如:/s.d/匹配s后接一個任意字符,最后是d。
* 匹配0個或多個字符,如:/*sed/匹配所有模板是一個或多個空格后緊跟sed的行。
[] 匹配一個指定范圍內(nèi)的字符,如/[[ss](http://man.linuxde.net/ss "ss命令")][ed](http://man.linuxde.net/ed "ed命令")/匹配sed和Sed。
[^]匹配一個不在指定范圍內(nèi)的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一個字母開頭,緊跟ed的行。
\(..\) 匹配子串,保存匹配的字符,如s/\(love\)able/\1rs,loveable被替換成lovers。
& 保存搜索字符用來替換其他字符,如s/love/**&**/,love這成**love**。
\< 匹配單詞的開始,如:/\<love/匹配包含以love開頭的單詞的行。
\>匹配單詞的結束,如/love\>/匹配包含以love結尾的單詞的行。
x\{m\}重復字符x,m次,如:/0\{5\}/匹配包含5個0的行。
x\{m,\} 重復字符x,至少m次,如:/0\{5,\}/匹配至少有5個0的行。
x\{m,n\} 重復字符x,至少m次,不多于n次,如:/0\{5,10\}/匹配5~10個0的行。</pre>
示例:
cat -n test |sed -n '/root/p'
匹配ip
[root@samba ~]# ifconfig eth0 | grep "inet addr"。ipaddr=`/sbin/ifconfig|awk -f'[: ]+' '/inet addr:/ {print $4}'|grep-e -v '(^127\.|^192\.168|^10\.)'`。ifconfig eth0 |sed -n ‘2p‘|sed ‘s#^.dr:##g‘|sed ‘s#bc.$##g‘。
image.png
image.png
替換man.config前50行,將man替換man123
cat man.config |sed '1,50s/man/man123/g'
image.png
cat -n man.config -n |sed '1,50p' |sed '1,50s/man/man123/g' 顯示替換內(nèi)容但文件內(nèi)容替換不保存
sed -i '1,50s/man/man123/g' file(文件名) 替換文件內(nèi)容
sed命令小結
sed替換的基本語法為:
sed 's/原字符串/替換字符串/'
單引號里面,s表示替換,三根斜線中間是替換的樣式,特殊字符需要使用反斜線”\”進行轉(zhuǎn)義,但是單引號”‘”是沒有辦法用反斜線”\”轉(zhuǎn)義的,這時候只要把命令中的單引號改為雙引號就行了,例如:
sed "s/原字符串包含'/替換字符串包含'/" //要處理的字符包含單引號
命令中的三根斜線分隔符可以換成別的符號,這在要替換的內(nèi)容有較多斜線是較為方便,只需要緊跟s定義即可,例如換成問號”?”:
sed 's?原字符串?替換字符串?' //自定義分隔符為問號