据我所知,当你使用单引号时,里面的所有东西都被认为是字面上的。我想用这个做我的替身。但我也想找一个包含单引号或双引号的字符串。
例如,
sed -i 's/"http://www.fubar.com"/URL_FUBAR/g'
我想用URL_FUBAR替换"http://www.fubar.com“。sed应该如何识别我的//或双引号?
谢谢你的帮助!
编辑:我可以使用s/\"http\:\/\/www\.fubar\.\com\"/URL_FUBAR/g
吗?
是否真的转义单引号内的字符?
发布于 2011-09-23 00:03:26
sed
中的s///
命令允许您使用其他字符而不是/
作为分隔符,如
sed 's#"http://www\.fubar\.com"#URL_FUBAR#g'
或
sed 's,"http://www\.fubar\.com",URL_FUBAR,g'
双引号不是问题。要匹配单引号,请交换两种类型的引号。请注意,单引号字符串不能包含单引号(甚至不能包含转义的引号)。
如果sed
要将这些点解释为文字点,而不是匹配任何一个字符的正则表达式模式.
,则需要对这些点进行转义。
发布于 2013-05-17 21:00:30
我的问题是,我需要将""
放在表达式之外,因为我在sed表达式本身内部有一个动态变量。因此,实际的解决方案是lenn jackman提出的,将sed正则表达式中的"
替换为[\"]
。
所以我要说的是:
RELEASE_VERSION="0.6.6"
sed -i -e "s#value=[\"]trunk[\"]#value=\"tags/$RELEASE_VERSION\"#g" myfile.xml
下面是:
#
是sed分隔符
正则表达式中的[\"]
= "
\"
= \"tags/$RELEASE_VERSION\"
=我的替换字符串,重要的是它只有引号的值
发布于 2011-09-23 01:15:54
很难在单引号中转义单引号。试试这个:
sed "s@['\"]http://www.\([^.]\+).com['\"]@URL_\U\1@g"
示例:
$ sed "s@['\"]http://www.\([^.]\+\).com['\"]@URL_\U\1@g" <<END
this is "http://www.fubar.com" and 'http://www.example.com' here
END
产生
this is URL_FUBAR and URL_EXAMPLE here
https://stackoverflow.com/questions/7517632
复制相似问题