1. sed简介
sed是一个管道命令,主要功能有将数据进行替换,删除,新增, 选取特定行等功能。
2. sed用法
sed [-nefr] [动作]
参数
-n 使用silent安静模式,sed一般会将所有数据输出,使用-n,只输出sed有修改的行。
-e 直接在命令行模式上进行sed操作
-f 将sed的动作写入文件, -f filename 从文件中读取动作。
-r 使用扩展正则表达式,默认为基础正则表达式
-i 直接修改文件内容,而不是屏幕输出。
动作说明:
[n1[,n2]]function
n1,n2表示操作的行数,
function :
a 新增
c 整行替换
d 删除
i 插入
p 打印
s 替换,如 1,20s/old/new/g 将1-20行中的old替换为new。
3. 使用举例
3.1 删除行
删除文件的2-5行
$ nl pass |sed '2,5d'
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
只删除第2行
$ nl pass |sed '2d'
1 root:x:0:0:root:/root:/bin/bash
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
删除从3到结尾,$表示文件最后一行
$ nl pass |sed '3,$d'
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3.2 新增行
$ nl pass |sed '2,4a hello world'
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
hello world
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
hello world
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
hello world
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
想插入多行使用 \,
$ nl pass |sed '2a hello world ...\
hahah'
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
hello world ...
hahah
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
想在当前行之前插入,将上面的a替换成i。
$ nl pass |sed '2i hello world'
1 root:x:0:0:root:/root:/bin/bash
hello world
2 bin:x:1:1:bin:/bin:/sbin/nologin
3.3 替换行
$ nl pass |sed '2,5c hello world'
1 root:x:0:0:root:/root:/bin/bash
hello world
6 sync:x:5:0:sync:/sbin:/bin/sync
3.4 打印行
打印出2-5行
可以使用 head -n 5 |tail -n 4,
现在可用sed ,使用-n
$ nl pass |sed -n '2,5p'
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
3.5 字符串替换
将password的:替换为--
]$ nl pass | sed 's/:/--/g'
1 root--x--0--0--root--/root--/bin/bash
2 bin--x--1--1--bin--/bin--/sbin/nologin
替换支持正则表达式
将结尾bash替换!
$ nl pass | sed 's/bash$/!!/g'
1 root:x:0:0:root:/root:/bin/!!
2 bin:x:1:1:bin:/bin:/sbin/nologin
$ sed -i 's/bash$/bash shell/g' pass