sed用法

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 替换行


替换2-5行
$ 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直接修改文件,不用输出
$ sed -i 's/bash$/bash shell/g' pass 

地址: http://blog.csdn.net/yonggang7/article/details/39120777

你可能感兴趣的:(linux,sed)