正则表达式用于转义字符串中的引号

时间:2009-11-01 04:49:12

标签: regex sed

我在文件中有一个字符串

"abc def ghi " klm "ghi ";

我想要在字符串中输出所有出现的结果

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

4 个答案:

答案 0 :(得分:1)

由于sed没有向前看,我认为我们需要做两次。这是代码:

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 "

希望这有帮助

答案 1 :(得分:0)

AWK

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

$ awk -vq="\042" '{gsub(q,"\\"q)}1' file
abc def ghi \" klm \"ghi

答案 2 :(得分:0)

我设法在sed

中完成了
> 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

答案 3 :(得分:0)

您无需将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\"/'

我使用了捕获组,但您可以使用替换。