sed 命令

sed 是一种在线编辑器,主要用来自动编辑一个或多个文件。

工作原理:sed一次处理一行内容,处理时把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),然后用sed命令处理缓冲区中的内容,最后把缓冲区内容送往屏幕,接着处理下一行,这样不断重复,直到文件末尾。

注:sed处理后文件内容并没有改变,除非你使用重定向存储输出,或者使用-i参数。

1、sed命令格式:

sed [-参数] [动作] 文件

1)参数:

  • -n :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
  • -e :直接在命令列模式上进行 sed 的动作编辑;
  • -f :直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的 sed 动作;
  • -i :直接修改读取的文件内容,而不是输出到终端。

2)动作:[n1[,n2]] function

其中n1, n2是用来圈定行的范围,可选参数:

  • 如果不写表示每一行执行function;
  • 如果只写n1,表示只执行n1行;
  • 如果写了n1,n2表示n1到n2行,比如:1,5表示第1到第5行;
  • 可以使用$表示最后一行,比如:3,$表示第3到最后一行;

3)function:

  • d :删除,表示删除当前行,因为是删除啊,所以 d 后面通常不接任何咚咚;
  • a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行);
  • i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
  • c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
  • s :取代, s 的动作可以搭配正规表示法,用法和vim中的替换s一样!例如 1,20s/old/new/g
  • p :列印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行

看一些例子:

$ cat test.txt 
uuencode
1003605091
mycat
01566
home
$ sed -n "p" test.txt 
uuencode
1003605091
mycat
01566
home
$ sed "p" test.txt 
uuencode
uuencode
1003605091
1003605091
mycat
mycat
01566
01566
home
home

 

注:如果不加-n,由于缓冲区的原因,每一行会打印两次。

2、常见功能:

1)添加行:

使用a或者i动作实现,前面可以加n1,n2来做范围圈定。

$ sed "$ a -------------" test.txt 
uuencode
1003605091
mycat
01566
home
-------------

$ sed "1,2 i -------------" test.txt 
-------------
uuencode
-------------
1003605091
mycat
01566
home

注:如果要修改源文件需要是用-i参数。例如:sed -i "1,2 a ---" test.txt

2)删除行:

$ sed "1,2 d" test.txt 
mycat
01566
home

3)替换:

A、每一行的m换成M:

$ sed "s/m/M/g" test.txt 
uuencode
1003605091
Mycat
01566
hoMe

B、每一行开头添加#:

$ sed "s/^/#/g" test.txt 
#uuencode
#1003605091
#mycat
#01566
#home

每一行结尾添加*:

$ sed "s/$/*/g" test.txt 
uuencode*
1003605091*
mycat*
01566*
home*

 

3、实战:

1)批量替换文件中指定的字符:

sed -i "s/old/new/g" `grep old -rl path`

grep命令的-r表示递归目录,-l表示只显示文件名。sed命令后面要接文件名,所以可以使用grep -l来实现。

例如:sed -i "s/cluster\: 10/cluster\: 100/g" `grep "cluster\: 10" -rl ./`

注:这里面要使用转移符\ 对冒号转移。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赶路人儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值