mac 执行sed -i指令时,总是出现extra characters at the end of command

执行命令如下时,总报extra characters at the end of command错误:

sed -i "s/192.168.0.2/192.168.0.3/g" *.rptdesign  

 

原因:

unix与linux在执行sed指令时有些区别,-i指令后面多加一个""空白符即可,如

sed -i "" "s/192.168.0.2/192.168.0.3/g" *.rptdesign  

 

 

附 sed用法:

    sed [OPTION] [ACTION] [FILE]

  action的部分基本上是这样的:'[n1[,n2]]function',如果想要连续执行多个action的话那么可以用-e参数。就是sed -e 'action1' -e 'action2'这样的形式。也可以直接用分号:sed 'action1;action2'这样的形式。

  n1和n2为可选项,可以用数字或者^,$符号,代表某些特定的行(^表示首行,$的话表示最后一行),表示后面的function在指定的这一行或几行之间展开。

  而function有以下参数:

    a:指append,后接上字符串,意思是在指定行后面新加入一行,内容为a后面跟的字符串。比如sed -i '2 a INSERTTEXT' test.txt就可以在test.txt现在的第二行后面加上一行,内容是"INSERTTEXT"

    d:指delete,删除指定一行或多行,注意d参数是跟在行号后面的,比如sed '2,5d' test.txt就是删除了文件中的第2至5行

    i:指insert,后接上字符串,和append相对,在指定行的上方加入一个新行

    s:指substitute替换,最常用的一个参数,其基本格式是's/old/new/[n]',old是被替换的字符串,new是新替换进的字符串,而n是一个可选项,可以写数字或者g。数字的意思是只替换一行中的第n个old,而g是指替换全部old,如果写了ng就是说替换第n个old之后到行末的所有的old

    y:用参数y可以对原文进行字符级别的替换,y的用法和s类似,如'y/OLD/NEW/',相当于把原文中所有的O替换成N,L换成E,D换成W。显然,要求OLD和NEW的长度应该相等,否则sed会报错。

    &:表示已经匹配到的字符串,通常用在正则匹配中,比如's/正则表达式/&ok/g'表示把所有匹配正则表达式的字符串后面都加上ok。

    /:'/pattern/'的作用就是定位含有pattern的行。它可以替代n1,n2那样死板的指定行的方法。比如sed '/pattern/!i INSERT'就是除了匹配到pattern的行,其余地行在前面一行都插入内容为INSERT的一行新行。

    !:写在参数前面否定,比如'/pattern/!d'就是不删除匹配到pattern的行

    p:常用在s的最后参数位置,即's/old/new/p'的形式。这么做可以让sed在输出显示的时候只输出被修改过的行。这么做的话需要配上命令的参数-n,最后的命令应该是像

      sed -n 's/old/new/p' test.txt这样的形式。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值