簡體   English   中英

正則表達式用於轉義字符串中的引號

[英]Regex for escaping quotes in a string

我的文件中有一個字符串

"abc def ghi " klm "ghi ";

我想轉義字符串中所有出現的“,結果輸出

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

由於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 "

希望這可以幫助

awk

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

要么

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

我設法在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

您無需將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\"/'

我使用了一個捕獲組,但是您可以改用替代。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM