sed
命令说明:
sed过滤、添加、编辑修改等等功能。重点
sed本身也是一个管道命令,可以分析standard input的,而且sed还可以将数据进行替换、删除、新增、选取特定行等的功能
语法:
sed[-nefr] 动作
-n :使用安静(silent)模式。在一般的sed用法中,所有来自STDIN的数据一般都会被列出到屏幕
上,但如果加上-n参数后,则只有经过sed特殊处理的那一行(后者操作)才会被列出来
-e :直接子命令行模式上进行sed的动作编辑
-f :直接将sed的动作写在一个文件内,-f filename则可以执行filename内的sed动作
-r :sed的动作支持的是扩展型正则表达式的语法(默认是基础正则表达式语法)
-i :直接修改读取的文件内容,而不是由屏幕输出
动作说明: [n1[,n2]] function
n1 :不见得会存在,一般代表选择进行动作的行数
function有下面这些参数:
a :新增,a的后面可以接字符串,而这些字符串会在新的一行出现(目前的下一行)
c :替换,c的后面可以接字符串,这些字符串可以替换n1,n2之间的行
d :删除,因为是删除,所以d后面通常不接任何参数
i :插入,i的后面可以接字符串,而这些字符串会在新的一行出现(目前的上一行)
p :打印,也就是将某个选择的数据打印出来,通常p会与参数sed-n 一起运行
s :替换,可以直接进行替换的工作,通常这个s的动作可以搭配
・以行为单位的新增/删除功能
范例:
nl /etc/passwd | sed ‘2,5d’ 删除2-5行
nl /etc/passwd | sed ‘2d’ 删除第2行
nl /etc/passwd | sed ‘2,$d 删除2到最后一行
・以行为单位的替换与显示功能
nl /etc/passwd | sed ‘2,5c NO 2-5 number’
nl /etc/passwd | sed -n ‘5,7p ’ 仅显示5-7行
sed -n '$p' ab #显示最后一行
sed -n '/ruby/p' ab #查询包括关键字ruby所在所有行
sed -n ‘/\$/p’ ab #查询ab中包括关键字$所在所有行使用\屏蔽特殊含义
sed '1a drink tea\nor coffee' ab #第一行后增加多行,使用换行符\n
・部分数据的查找并替换的功能
sed ‘s/要被更换的字符串/新的字符串/g’
・直接修改文件内容(危险操作)
sed -i ‘s/\$/\!/g’ regular.txt
sed -i ‘$a #This is a test’ regular.txt
命令实践:
[root@yubinghost~]# nl /etc/passwd | sed '2,5d' 删除2-5行
1 root:x:0:0:root:/root:/bin/bash
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
..............
[root@yubinghost~]# nl /etc/passwd | sed '2a Drink tea or ......\
> drink beer?'
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
Drink tea or......
drink beer ?
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
我们可以新增不只一行,可以新增好几行,但是每一行之间都必须要以反斜杠 \ 来进行新行的增加
[root@yubinghost~]# nl /etc/passwd | sed '2,5c No 2-5 number'
1 root:x:0:0:root:/root:/bin/bash
No 2-5 number 将2-5替换成No2-5 number了
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
[root@yubinghost~]# nl /etc/passwd | sed -n '2,5p' 仅显示2-5行
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@yubinghost~]#
[root@yubing ~]# nl /etc/passwd | sed '5,$d' 删除5到最后一行
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
[root@yubing ~]#
[root@yubing ~]# nl /etc/passwd|sed '2,5c NO2-5 number' 将2-5行替换成
1 root:x:0:0:root:/root:/bin/bash
NO 2-5 number
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8 halt:x:7:0:halt:/sbin:/sbin/halt
9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
.......................................
[root@yubing ~]# nl /etc/passwd | sed -n'5,7p' 仅显示5-7行
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
[root@yubing ~]# nl /etc/passwd | sed'5,7p' 不加-n参数会显示所有行数
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8 halt:x:7:0:halt:/sbin:/sbin/halt
9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10 news:x:9:13:news:/etc/news: