如何让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
中使用双引号?
答案 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