我有一个简单的文本文件:
>cat a
A=B
Run Code Online (Sandbox Code Playgroud)
使用 sed,我尝试将其更改为:
setenv A B
Run Code Online (Sandbox Code Playgroud)
我的 sed 命令不起作用是:
>sed -ir 's/([^\=]+)\=(.*)/setenv \1 \2/' a
sed: -e expression #1, char 30: invalid reference \2 on `s' command's RHS
Run Code Online (Sandbox Code Playgroud)
但是,当我删除 -i 选项时,命令字相同:
>sed -r 's/([^\=]+)\=(.*)/setenv \1 \2/' a
setenv A B
Run Code Online (Sandbox Code Playgroud)
当我使用基本正则表达式时,我没有这个问题:
>sed -ir 's/\([^=]*\)=\(.*\)/setenv \1 \2/' a
>cat a
setenv A B
Run Code Online (Sandbox Code Playgroud)
我的 sed 版本是:
>sed --version
sed (GNU sed) 4.2.2
Run Code Online (Sandbox Code Playgroud)
关于可能出什么问题有什么建议吗?
GNU Sed 的选项-i有些不符合规范,因为它可以选择采用指定备份后缀的参数
Run Code Online (Sandbox Code Playgroud)-i[SUFFIX], --in-place[=SUFFIX] edit files in place (makes backup if SUFFIX supplied)
因此意味着“就地sed -ir 's/pattern/replacement' a编辑文件,制作备份文件”而不是“就地编辑文件,使用扩展正则表达式语法”aara
你想要要么
sed -i -r 's/pattern/replacement' a
Run Code Online (Sandbox Code Playgroud)
或(不太清楚恕我直言)
sed -ri 's/pattern/replacement' a
Run Code Online (Sandbox Code Playgroud)