sed

选项

sed -n

不再默认显示所有输出行

zct@zct-G7-7588:~/workspace/bash$ cat sed.log
This is 1 line!
This is 2 line!
This is 3 line!
This is 4 line!
This is 5 line!

zct@zct-G7-7588:~/workspace/bash$ sed -e "p;s/2/dog/p" sed.log
This is 1 line!
This is 1 line!
This is 2 line!
This is dog line!
This is dog line!
This is 3 line!
This is 3 line!
This is 4 line!
This is 4 line!
This is 5 line!
This is 5 line!

如上,在5行文本中不使用 -n 选项,那么会有这样的结果,无需替换的输入行会输出两次,分别为我们的指令‘p’输出一次,以及默认输出,需要注意的是默认输出所输出的行,是经过所有指令处理的结果,即使未被改变。而我们可以看到行数2被输出了3次,分别为‘p’一次,‘s/2/dog/p’一次,以及默认输出,而默认输出输出的就是经过‘s’指令处理的结果。所以当我们开启 -n 选项后,可以预测到会被输出的,只有输入的1-5除了2行各一次,而第二行会输出未改变以及改变后两次

zct@zct-G7-7588:~/workspace/bash$ sed -n -e "p;s/2/dog/p" sed.log
This is 1 line!
This is 2 line!
This is dog line!
This is 3 line!
This is 4 line!
This is 5 line!
sed -e

上面用过了,对某一行需要进行多个处理指令时用到,指令间用;隔开

指令

a
zct@zct-G7-7588:~/workspace/bash$ sed '3a\hello\' sed.log
This is 1 line!
This is 2 line!
This is 3 line!
hello
This is 4 line!
This is 5 line!

在某一行后加入一行

i
zct@zct-G7-7588:~/workspace/bash$ sed '3i\hello\' sed.log
This is 1 line!
This is 2 line!
hello
This is 3 line!
This is 4 line!
This is 5 line!

在某一行前加入一行
插入的内容用\包含

s
zct@zct-G7-7588:~/workspace/bash$ sed 's/line/enil/' sed.log
This is 1 enil!
This is 2 enil!
This is 3 enil!
This is 4 enil!
This is 5 enil!

替换某一行内的字符,/a/b/代表用b替换a,其具体指令形式是s/a/b/flag,flag可以是数字,g,p,w
分别代表,替换第n个出现的匹配字符,替换所有,打印该行和将结果写入文件

d
zct@zct-G7-7588:~/workspace/bash$ sed '2d' sed.log
This is 1 line!
This is 3 line!
This is 4 line!
This is 5 line!

删除某一行

c
zct@zct-G7-7588:~/workspace/bash$ sed '2c\hello world\' sed.log
This is 1 line!
hello world
This is 3 line!
This is 4 line!
This is 5 line!

替换行内内容

y
zct@zct-G7-7588:~/workspace/bash$ sed 'y/12345/6789c/' sed.log
This is 6 line!
This is 7 line!
This is 8 line!
This is 9 line!
This is c line!

单字符替换,12345对应6789c

注意一下,其中i,a指令我们在指令前显示的指定了行数2,这个可以认为是我们需要进行操作的行数,这个参数对于y,c等指令也是可行的,当你想要只对某一行进行特定的操作时,可以在指令前加上以下:

/string/  一个你想要匹配的字符串,代表我需要对包含这字符串的行进行操作
n    一个数字,代表需要操作的行数
zct@zct-G7-7588:~/workspace/bash$ sed '2y/12345/6789c/' sed.log
This is 1 line!
This is 7 line!
This is 3 line!
This is 4 line!
This is 5 line!
我们在加上2后,y指令只对第二行产生了作用
zct@zct-G7-7588:~/workspace/bash$ sed '/3 line/y/12345/6789c/' sed.log
This is 1 line!
This is 2 line!
This is 8 line!
This is 4 line!
This is 5 line!
在我们加上/3 line/后,y指令只对包含了”3 line“这个字符串的第三行产生了作用
其他指令同理
附,多重操作如下:
‘/string/{command;command}’
zct@zct-G7-7588:~/workspace/bash$ sed '/3 line/{y/12345/6789c/;s/is/are/2}' sed.log
This is 1 line!
This is 2 line!
This are 8 line!
This is 4 line!
This is 5 line!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值