Regex для экранирования кавычек в строке - PullRequest
0 голосов
/ 01 ноября 2009

У меня есть строка в файле

"abc def ghi " klm "ghi ";

Я хочу экранировать все вхождения "в строке, вывод результата

"abc def ghi \" klm \"ghi";

Ответы [ 4 ]

1 голос
/ 01 ноября 2009

Поскольку sed не смотрит в будущее, я думаю, нам нужно сделать это дважды. Вот код:

<code>echo '"abc def ghi " klm "ghi ";' | sed -r 's/(\")/\\"/g'    | sed -r 's/(^\"|\";$)/";/g'
# ^ Print the text                  ^ Replace all " with \"    ^ Replace the first and the last \" back to "

Надеюсь, это поможет

0 голосов
/ 01 ноября 2009

Вам не нужно передавать sed в sed, вы можете сделать все это за один шаг:

echo '"abc def ghi " klm "ghi ";' | sed 's/\"/\\"/g; s/^\\"\(.*\)\\"/\"\1\"/'

Некоторые версии sed предпочитают это так:

echo '"abc def ghi " klm "ghi ";' | sed -e 's/\"/\\"/g' -e 's/^\\"\(.*\)\\"/\"\1\"/'

Я использовал группу захвата, но вместо этого вы могли бы использовать чередование.

0 голосов
/ 01 ноября 2009

Мне удалось сделать это в седле

> echo "abc def ghi \" klm \" ghi"
abc def ghi " klm " ghi
> echo "abc def ghi \"klm \" ghi" | sed 's/"/\\"/g'
abc def ghi \" klm \" ghi
0 голосов
/ 01 ноября 2009

AWK

$ awk '{gsub("\"","\\\"")}1' file
abc def ghi \" klm \"ghi

или

$ awk -vq="\042" '{gsub(q,"\\"q)}1' file
abc def ghi \" klm \"ghi
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...