g 表示行内全面替换。
p 表示打印行。
w 表示把行写入一个文件。
x 表示互换模板块中的文本和缓冲区中的文本。
y 表示把一个字符翻译为另外的字符(但是不用于正则表达式)
\1 子串匹配标记
& 已匹配字符串标记
^匹配行开始,如:/^sed/匹配所有以sed开头的行。
$匹配行结束,如:/sed$/匹配所有以sed结尾的行。
. 匹配一个非换行符的任意字符,如:/s.d/匹配s后接一个任意字符,最后是d。
* 匹配0个或多个字符,如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。
[] 匹配一个指定范围内的字符,如/[[ss](http://man.linuxde.net/ss "ss命令")][ed](http://man.linuxde.net/ed "ed命令")/匹配sed和Sed。
[^]匹配一个不在指定范围内的字符,如:/[^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' 显示替换内容但文件内容替换不保存
sed -i '1,50s/man/man123/g' file(文件名) 替换文件内容
sed命令小结
sed替换的基本语法为:
sed 's/原字符串/替换字符串/'
单引号里面,s表示替换,三根斜线中间是替换的样式,特殊字符需要使用反斜线”\”进行转义,但是单引号”‘”是没有办法用反斜线”\”转义的,这时候只要把命令中的单引号改为双引号就行了,例如:
sed "s/原字符串包含'/替换字符串包含'/" //要处理的字符包含单引号
命令中的三根斜线分隔符可以换成别的符号,这在要替换的内容有较多斜线是较为方便,只需要紧跟s定义即可,例如换成问号”?”:
sed 's?原字符串?替换字符串?' //自定义分隔符为问号