文本处理工具sed
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文本处理工具sed相关的知识,希望对你有一定的参考价值。
sed:stream Editor流编辑器,默认不编辑原文件,仅对模式空间中的数据做处理;而后,处理结束后,将模式空间打印至屏幕。
语法:
sed [option] ‘AddressCommand‘ file1 file2...
option选项有:
-n :静默模式,不再显示模式空间的内容
-i :直接修改源文件
-r :使用扩展正则表达式
Address常用的匹配范围:
1、startLine,endLine
如:1,100 表示从第一行到100行,$表示最后一行
2、/RegEXP/ 正则匹配,将匹配到的行显示出来
如:/root/ 将匹配到有root的行显示
3、/pattern1/,/pattern2/,从第一次匹配到pattern1开始到匹配到pattern2的行结束的中间的行
4、LineNumber匹配指定的行
5、startLine,+N,从startLine开始,往后的N行
command常用命令
d:删除匹配到的行
p:显示符合条件的行
a string :在匹配当的行后面追加string的内容
i string : 在匹配当的行前面添加string的内容
r file :将file文件的内容添加到匹配到的行出
w file :将匹配到的行添加到file文件中
s/pattern/string/修饰符 :将匹配到的pattern替换成string,默认是替换第一个被匹配到的
常用的修饰符有:
i :忽略大小写
g :全局替换
如:
1、删除/etc/grub.conf文件中行首的空白符;
sed -r ‘[email protected]^[[:spapce:]][email protected]@g‘ /etc/grub.conf
2、替换/etc/inittab文件中"id:3:initdefault:"一行中的数字为5;
sed ‘[email protected](id:)[0-9](:initdefault:)@15[email protected]‘ /etc/inittab
3、删除/etc/inittab文件中的空白行;
sed ‘/^$/d‘ /etc/inittab
4、删除/etc/inittab文件中开头的#号;
sed -r ‘[email protected]^#@@g‘ /etc/inittab
5、删除某文件中开头的#号及后面的空白字符,但要求#号后面必须有空白字符;
sed -r ‘[email protected]^#[[:space:]][email protected]@g‘ /etc/inittab
6、删除某文件中以空白字符开头后面跟#类的行中的开头的空白字符及#号
sed -r ‘[email protected]^[[:space:]]+#@@g‘ /etc/inittab
7、取出一个文件路径的目录名称;如取出/etc/inittab文件的目录,即/etc
##echo "/etc/rc.d/" | sed -r ‘[email protected]^(/.*/)[^/]+/[email protected][email protected]‘
echo ‘/etc/inittab‘ | sed -r ‘s#^(/.*)/(.*)#1#‘
基名/文件名:
echo "/etc/rc.d/" | sed -r ‘[email protected]^/.*/([^/]+)/[email protected][email protected]‘
echo ‘/etc/inittab‘ | sed -r ‘s#^(/.*)/(.*)#2#‘
需要注意的是,如果要替换原文见的内容要加 -i 参数,sed 中的///,可以使用###或@@@等字符代替。
p的 command参数也要注意下,匹配到的行将会显示两次,没匹配到的显示一次,如果显示两次的,第一次是 p的的作用将匹配到的行打印出来,第二次是sed命令的作用,会将模式空间的内容显示出来,所以说没匹配到的也会显示一次,如果想只显示一次可以加 -n 参数,那么sed命令中模式空间的内容不显示。
以上是关于文本处理工具sed的主要内容,如果未能解决你的问题,请参考以下文章