如何使用sed匹配双引号

时间:2015-04-16 13:59:29

标签: unix sed tcsh

如何让sed使用双引号(")作为匹配?

我尝试将"source/design替换为"source/design_new而不更改第二个编码。

输入:

"source/design",  
"include/source/design",

期望输出:

"source/design_new",    #only this line renaming  
"include/source/design"

我尝试了命令:

sed "s/\"source\/design/\"source\/design_new/g"

但它抱怨unmatched "错误。有没有办法在sed中使用双引号?

3 个答案:

答案 0 :(得分:2)

基本上,sed采用s之后的任何内容作为分隔符(换行符或反斜杠除外)。因此,您可以使用其他任何字符 - 让我们说; - 作为分隔符而不是/

示例:

sed 's;"source/design;"source/design_new;g' input_file

答案 1 :(得分:1)

只需在命令周围使用单引号而不是双引号。这样您就不必担心如何处理它们了:

sed 's~"source/design~"source/design_new~g' file
    ^                                     ^

使用您给定的输入,此命令将返回:

"source/design_new",  
"include/source/design",

另请注意,您可以使用/中的其他分隔符避免转义每个sed(我使用~,但它也可能是|或另一个)。< / p>

答案 2 :(得分:0)

欢迎来到tcsh。您不能在双引号中包含双引号。结束双引号并反斜杠双引号:

sed "s/"\""source\/design/"\""source\/design_new/g"

或者,更具可读性(使用不同的分隔符以避免需要反斜杠斜杠,并且不使用引号,因为字母,斜杠和下划线不需要它们:

sed s=\"source/design=\"source/design_new=g