我在文件中有一个字符串
"abc def ghi " klm "ghi ";
我想要在字符串中输出所有出现的结果
"abc def ghi \" klm \"ghi";
答案 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\"/'
我使用了捕获组,但您可以使用替换。