sed命令中关于-i 和 -r 参数配合使用出现的问题

问题出现在运行shell脚本的过程中:

在一个文本中剔除掉B、b开头的单词

#!/bin/bash
cat    >>  input.txt   <<   EOF
big
nowcoder
Betty
basic
test
EOF
sed    -ri '/^(B|b)/{d}'  input.txt

正常返回的结果应该是这样的:

nowcoder
test

但是运行结果是这样的:

注:  sed.sh  是脚本的名字 

[root@server-104 /home/shell/niuke]# ./sed.sh 
[root@server-104 /home/shell/niuke]# ls
input.txt  input.txtr  sed.sh
[root@server-104 /home/shell/niuke]# 
[root@server-104 /home/shell/niuke]# 
[root@server-104 /home/shell/niuke]# cat  input.txt
big
nowcoder
Betty
basic
test
[root@server-104 /home/shell/niuke]#

可以看到执行的结果和原数据一模一样,而且本应该在当前目录中生成一个input.txt的,但还另外多生成了一个input.txtr 。。。这是个什么玩意,咋来的?

搜集多方资料得知: 使用man   查看  sed  的手册   ,其中关于-i参数做了如下解释:

       -i[SUFFIX], --in-place[=SUFFIX]

              edit files in place (makes backup if SUFFIX supplied)

    意思是就地编辑文件,如果有后缀存在则执行备份  ,生成input.txtr的原因   应该就是   sed   -ir    中的r被当成了input.txt 的备份后缀  。这里我也换别的试了一下,确实是这样。

例如:  把  “sed     -ir      xxxxx “    换成    “sed   -itest      xxxxxx” ,生成的文件就成了下面这样 

[root@server-104 /home/shell/niuke]# ls
input.txt  input.txttest  sed.sh

如果我们想要得到正确的结果,将sed   命令的  -r参数真正发挥作用,那么应该     将  r参数写在i   参数前面    

 

本人毕业刚刚入职系统运维工程师的岗位 ,工作内容大部分是阿里云上服务的维护,对linux基础操作接触不多,但有一定的基础。欢迎即将准备入行或已经在职linux运维相关岗位的小伙伴来私信交流。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值