注意:Linux三大文本查找工具:grep、sed、awk。
sed命令基本用法:
Stream EDitor:行编辑器;实现逐行处理文本;而全屏编辑器是vim。
工作特性:
并不处理文本文件本身,而是处理文件内容时,是逐行的把文本加载至内存空间中,在内存中完成处理,然后再输出到屏幕上,对sed而言,内存空间叫模式空间,可对文本行进行模式匹配后再做处理,sed有许多编辑命令。
sed命令默认不编辑原文件,仅对模式空间中的数据做处理,而后,处理结束后,将模式空间的内容显示至屏幕。
sed命令格式
sed [options] ‘AddressCommand‘ FILE ...
-n:静默模式,不再默认显示模式空间中的内容;
-i:直接修改原文件;
-e ‘AddressCommand‘ -e ‘AddressCommand‘:同时执行多个编辑命令;
-f /PATH/TO/SED_SCRIPT:把每一个编辑命令‘AddressCommand‘保存至文件中,从文件中读出编辑命令进行处理;
-r:表示使用扩展的正则表达式;
Address:指定行的编辑范围,表示法为;
1、StartLine,EndLine:开始行,结束行;例如1,100
$:最后一行,即倒数第一行;
$-1:表示倒数第二行(存疑是否支持?);
2、/RegExp/:使用正则式匹配;例如:/^root/
3、/pattern1/,/pattern2/:表示第一次被pattern1匹配到的行开始,至第一次被pattern2匹配到的行结束;例如sed ‘/oot/d‘ /etc/fstab表示删除文件中包含oot的行;
4、LineNumber:指定的行;
5、StartLine,+N:表示从StartLine开始,向后的N行;例如sed ‘1,+2d‘ /etc/fstab删除前3行;
Command:编辑命令
d:删除符号条件的行;例如sed ‘1,2d‘ /etc/fstab表示删除文件的第1,2行,然后显示到屏幕;
p:显示符号条件的行;例如sed ‘/^\//p /etc/fstab显示以/开头的行,则符合条件的行显示了2次,原因是因为原文件也显示了一次,匹配到的文件又显示了一次;可使用-n选项即sed -n ‘/^\//p /etc/fstab;
a \string:在符合的行后面追加新行,内容为string;例如sed ‘ /^\//a \# hello word‘ /etc/fstab表示在以/开头的行下面加1行# hello word;
如果加2行,则sed ‘/^\//a \# hello word\n# hello word‘ /etc/fstab
\n:为换行;
i \string:在符合的行前面添加新行,内容为string;
r FILENAME:将指定的文件的内容添加至符合条件的行的下行;例如sed ‘2r /etc/issue‘ /etc/fstab表示把issue文件添加在第2行的下面(可用于合并文件);又例如sed ‘1,,2r /etc/issue‘ /etc/fstab
w FILENAME:将指定范围内的内容另存至指定的文件中;例如sed -n ‘/oot/w /tmp/oot.txt‘ /etc/fstab表示匹配oot所在的行,另存为oot.txt文件中;
s/pattern/string/:查找并替换,pattern可使用正则式,默认只替换每行中第一次被模式匹配到的字符串;例如sed ‘s/oot/OOT/‘ /etc/fstab表示查找oot替换为OOT;又例sed ‘s/^\//#/‘ /etc/fstab表示以/开头的行替换为#;又例sed ‘s/\//#/‘ /etc/fstab表示只替换每行中第一次被模式匹配到的字符串;
加修饰符:
g:全局替换;例如sed ‘s/\//#/g‘ /etc/fstab表示以/开头的行全局替换为#;
i:忽略字符大小写;
s///:也是使用其它分隔符,只要不与使用的字符串相同即可;例如[email protected]@@或s###,这样就避免了转义;
引用符:&:表示引用模式匹配到的整个字符串,类似正则式中的分组;例如sed.txt文件内容为hello,like .hi,my love.;查找sed ‘s#l..e#&r#g‘ sed.txt结果为hello,liker.hi,my lover.或写为sed ‘s#\(l..e\)#\1r#g‘ sed.txt
例如:
history | sed ‘s#^[[:space:]]*##g‘ | cut -d‘ ‘ -f1表示删除开头的空白字符