sed

来源:互联网 发布:python 简明教程 编辑:程序博客网 时间:2024/06/06 20:31

sed可以分析标准的输入(STDIN)的数据,然后将数据经过处理后,没再将它输出到标准输出(STDOUT),他有替换,删除,新增、选取特定行等处理功能。一般情况下,使用sed对数据流进行编辑,然后输出到临时文件,当校对过临时文件的内容后,才把临时文件替换正式文件。但是在一些特殊的情况下,需要直接对文件进行修改,可以用到-i参数。使用-i参数时需谨慎确认,以免错误修改文件。

选项:
-n:使用安静模式。一般的,所有来自STDIN的数据都会显示在屏幕上,用-n后,只有经过特殊处理的那一行才能显示
-e:直接在命令模式上进行sed的操作与编辑
-f:直接将sed操作写在一个文件里,-f filename则可以执行filename内的sed操作
-r:sed的操作支持的是扩展正则表达式的语法(默认是基础正则表达式)
操作说明:[n1[,n2]]function
n1,n2:不一定存在,一般代表“选择进行操作的行数”,举例来说,如果操作需要在10到20行之间,则“ 10,20 [操作] ”
function有下面这些操作:
a:追加,a后面可以接字符串,而这些字符串会在新一行出现(当前下一行)
c:替换,c后面可以接字符串,这些字符串可以替换n1,n2之间的行
d:删除,因为是删除,所以d后面通常不接任何内容
i: 插入,i的后面可以接字符串,而这些字符串会在新的一行出现(当前的上一行)

P:打印,即打印某个选择的数据。通常P会参与sed -n一起运行
s:搜索,不但可以搜索,还可以进行替换,通常s操作与正则表达式一起使用。例:1,20s/old/new/g
例一:显示/etc/passwd的内容,并且需要打印行号,同时,将第2~5行删除
[root@linux ~]# nl /etc/passwd | sed '2,5d'     //如果删除2到最后,则:nl/etc/passwd | sed '3,$d'
例二:在第二行加上‘drink tea?’字样
[root@linux ~]# nl /etc/passwd | sed '2a drink tea?'  //如想在第二行前,则把2a变成2i即可
例三:在第二行的后面加入两行字
[root@linux ~]# nl /etc/passwd | sed '2a Drink tea or ......\
>drink beer?'                            //可以增加多行,\来进行新行的增加
例四:将2~5行的内容替换为“ No 2~5 number”
[root@linux ~]# nl /etc/passwd | sed '2,5c No 2~5 number'
例五:仅显示5~7行
[root@linux ~]# nl /etc/passwd | sed -n '5,7p'       //如不加-n,5~7行会重复出现
例六:可以使用ifconfig列出IP,若要显示eth0的IP地址
[root@linux ~]# ifconfig eth0 | grep 'inet' | sed 's/^.*addr://g' | \
>sed 's/Bcast.*$//g'
例七:在/etc/man.config文件中,将有MAN的设置取出,但不要说明内容
[root@linux ~]# cat /etc/man.config | grep 'MAN' | sed 's/#.*$//g' | \
>sed '/^$/d'

自己写的例子:
sed ‘2,5d’删除2-5行
sed ‘3d’ 删除第三行
sed ‘/^#/d’删除#开头的行(//中间的是正则表达式)
sed '/My/,/You/d' datafile删除包含"My"的行到包含"You"的行之间的行
sed -i ‘s/\.$/!/g’ re.txt把re.txt每一行用.结尾的改成!结尾。直接修改re.txt文件。
替换:sed 's/要被替换字符串/新的字符串/g'
cat /etc/man.config | sed ‘s/^#//g’找出#开头的行,并用null替换掉,就是把行首的“#”用删除。
正则表达式 ^$表示空行


 

 


原创粉丝点击