使用 SED 替换长字符串 - 但在正则表达式中得到未终止的替换

Tuz*_*Tuz 2 linux macos sed quoting

您好,尝试将以下字符串替换为长字符串:

@x@ 
Run Code Online (Sandbox Code Playgroud)

使用我从命令行获得的字符串:

read test    
sed -i --backup 's/@x@/'${test}'/g' file.json README.md
Run Code Online (Sandbox Code Playgroud)

但它仅适用于1 个单词,如果单词之间有空格则不起作用。即使在引号之间

sed: 1: "s/@x@/string test string: unterminated substitute in regular expression
Run Code Online (Sandbox Code Playgroud)

pyt*_*kaa 6

如果你在 MacOS 上运行它并遇到困难“正则表达式中未终止的替换”的问题,对此有一个更简单的解释:

\n\n

MacOS 的 sed 版本与 Linux 上的通常版本略有不同。-i需要一个参数。如果没有,只需添加""后面添加-i

\n\n
sed -i "" --backup \'s/@x@/\'${test}\'/g\' file.json README.md\n
Run Code Online (Sandbox Code Playgroud)\n\n

或者例如,如果您只需要删除圆顶线,这适用于 Linux,但会带来\xe2\x80\x9cinvalid 命令代码\xe2\x80\x9d在 MacOS 上

\n\n
sed -i 39d filenamehere.log\n
Run Code Online (Sandbox Code Playgroud)\n\n

这适用于 MacOS

\n\n
sed -i "" 39d filenamehere.log\n
Run Code Online (Sandbox Code Playgroud)\n