我有一个简单的文本文件:
>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