zsh sed 区分“\(”和“(”

zsh sed distinguish "\(" from "("

我正在通过 zsh 脚本(在 Mac OS Catalina 上)进行一些字符串编辑。有些字符串前面有带斜杠的括号,有些则没有(通常前面有 space)。

我正在尝试编写一个忽略左括号的命令,除非它事先有一个斜杠。

所以命令...

sed 's/"\("/"\\("/g'

...不会被...触发

"foo (bar)" 

...但会触发...

"foo \(bar)"

您可以使用

sed 's/\*(/\\(/g' file > outfile

在这里,\*( 匹配任意数量的 \ 然后 ( 并且 \\( 替换实际上替换为两个 \ 字符然后 (。需要在替换部分使用双反斜杠来表示一个反斜杠,因为 \ 用于编码反向引用(如 </code>、<code> 等)。