zsh sed различие guish "\ (" от "(" - PullRequest
1 голос
/ 30 мая 2020

Я занимаюсь редактированием строк из сценария zsh (на Ma c OS Catalina). Некоторые строки имеют круглые скобки с sla sh перед, а некоторые нет (обычно пробел перед).

Я пытаюсь написать команду, которая игнорирует левую скобку, если она не имеет sla sh заранее.

Значит, команда ...

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

... не будет запускаться ...

"foo (bar)" 

... но сработает на ...

"foo \(bar)"

1 Ответ

2 голосов
/ 30 мая 2020

Вы можете использовать

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

Здесь \\*( соответствует любому количеству \, а затем (, а замена \\\\( фактически заменяется двумя \ символами, а затем (. Необходимо использовать двойной backsla sh в заменяющей части для представления одного backsla sh, потому что \ используется для кодирования обратных ссылок (например, \1, \2, et c.).

.
...