sed -r 与 -i 不兼容

sed -r 与 -i 不兼容

我有一个简单的文本文件:

>cat a
A=B

使用 sed,我尝试将其更改为:

setenv A B

我的 sed 命令不起作用是:

>sed -ir 's/([^\=]+)\=(.*)/setenv \1 \2/' a
sed: -e expression #1, char 30: invalid reference \2 on `s' command's RHS

但是,当我删除 -i 选项时,命令字相同:

>sed -r 's/([^\=]+)\=(.*)/setenv \1 \2/' a
setenv A B

当我使用基本正则表达式时,我没有这个问题:

>sed -ir 's/\([^=]*\)=\(.*\)/setenv \1 \2/' a
>cat a
setenv A B

我的 sed 版本是:

>sed --version
sed (GNU sed) 4.2.2

关于可能出什么问题有什么建议吗?

答案1

GNU Sed 的选项-i有些不符合规范,因为它可以可选地采用指定备份后缀的参数

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

          edit files in place (makes backup if SUFFIX supplied)

因此sed -ir 's/pattern/replacement' a意味着“a就地编辑文件,制作备份文件ar”而不是“a就地编辑文件,使用扩展正则表达式语法”

你想要要么

sed -i -r 's/pattern/replacement' a

或(不太清楚恕我直言)

sed -ri 's/pattern/replacement' a

相关内容