【shell】sed 命令

sed全名是stream editor,文本的流式处理器。所谓的流式是与交互式相对的,交互式处理器比如vim。

 

用法:

1)行内替换;

使用s命令,格式为sed "s/pattern/replacement/flags"。

pattern是新内容,replacement是老的要被替换的内容,支持Basic RE。

flags是替换选项,总共有以下四种:

a)数字,表示替换第几处,模式只替换匹配的第一处;

b)g,整行内所有匹配到的全部替换;

c)p,仅将匹配到的行打印出来,这个一般和-n一起使用,-n表示忽略sed本身的输出,也就是仅仅打印匹配出的内容;

d)w,将替换的结果写入文件中。

例子:

miracle@localhost:~|⇒  echo "aaabbbaaa" | sed "s/aaa/ccc/"
cccbbbaaa

默认不加flags,只替换匹配到的第一处。

miracle@localhost:~|⇒  echo "aaabbbaaa" | sed "s/aaa/ccc/g"
cccbbbccc

加上g,整行内所有匹配到的都被替换。

miracle@localhost:~|⇒  echo "aaabbb\naaa" | sed -n "s/aaa/ccc/p"
cccbbb
ccc
miracle@localhost:~|⇒  echo "aaabbb\naaa" | sed  "s/aaa/ccc/p"
cccbbb
cccbbb
ccc
ccc

如果不加-n,将会输出两次,这是因为第一次是sed命令的输出,第二次是p标记的输出,如果加上了-n,那么会省去sed命令的输出,结果更清楚。

miracle@localhost:~|⇒  echo "aaabbb\naaa" | sed  "s/aaa/ccc/w a.txt"
cccbbb
ccc

miracle@localhost:~|⇒  cat a.txt
cccbbb
ccc

使用w标记将替换结果保存在一个文件中。

 

2)使用地址

sed命令都可以加入地址,用来指定行号。

格式为[address]commend

举个例子:

只替换第一行,在s命令前指定行号1即可:

miracle@localhost:~|⇒  echo "aaabbb\naaa" | sed  "1s/aaa/ccc/w a.txt"
cccbbb
aaa

还可以指定范围,使用n,m的格式即可:

miracle@localhost:~|⇒  echo "aaabbb\naaa\naaa" | sed  "2,3s/aaa/ccc/g"
aaabbb
ccc
ccc

或者使用$来指定尾行,要加转义符:

miracle@localhost:~|⇒  echo "aaabbb\naaa\naaa" | sed  "2,\$s/aaa/ccc/g"
aaabbb
ccc
ccc

 

3)文本过滤器:

格式为/pattern/command

首先说一下这个用法的作用,不是可以通过s命令加正则匹配搞定过滤和替换吗,为什么还要加一个过滤器?

因为,有时匹配和替换是分开的,比方说要搜出带有xxx的行,将其内部的yyy替换为zzz。

例子:

miracle@localhost:~|⇒  echo "aaabbb\naaa\naaa" | sed  "/bbb/s/aaa/ccc/g"
cccbbb
aaa
aaa

这里仅仅将包含有bbb的行中的aaa替换为ccc。

注意这里介绍的寻址和过滤器可以用于sed所有的命令上,插入删除修改等等。

 

4)删除命令:

格式为/addredd/d

比如:

miracle@localhost:~|⇒  echo "aaabbb\naaa\naaa" | sed  "/bbb/d"
aaa
aaa

将包含bbb的行删除掉。

 

5)插入和追加(IOS好像不支持)

格式为/address/cmd newLine

这里的cmd可以为:

i\:表示在匹配行前插入新行;

a\:表示在匹配行后插入新行;

miracle@localhost:~|⇒  echo "aaabbb\naaa\naaa" | sed  "/bbb/i\hhh":

在包含bbb的行的前面插插入。

miracle@localhost:~|⇒  echo "aaabbb\naaa\naaa" | sed  "2a\hhh"

在第二行后面插入。

 

6)修改行

这个用法和插入追加是一样的,与s命令的区别在于这个命令是整行修改的。

/address/c\ newLine

 

另外sed命令默认是不修改原文件的,如果想要修改可以添加-i参数。

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值