KRB*_*KRB 63 bash command-line sed
从我所能找到的,当你使用单引号时,内部的所有内容都被视为字面意思.我想要替换它.但我也希望找到一个包含单引号或双引号的字符串.
例如,
sed -i 's/"http://www.fubar.com"/URL_FUBAR/g'
Run Code Online (Sandbox Code Playgroud)
我想用URL_FUBAR替换"http://www.fubar.com".如何识别我的//或我的双引号?
谢谢你的帮助!
编辑:我可以用s/\"http\:\/\/www\.fubar\.\com\"/URL_FUBAR/g吗?
\实际上是否在单引号内逃脱了字符?
Kus*_*nda 88
该sed命令允许您/在其s命令中使用其他字符而不是分隔符:
sed 's#"http://www\.fubar\.com"#URL_FUBAR#g'
Run Code Online (Sandbox Code Playgroud)
双引号不是问题.要匹配单引号,请切换两种类型的引号.请注意,单引号字符串可能不包含单引号(甚至不包含单引号).
如果sed要将它们解释为点而不是.与任何一个字符匹配的正则表达式模式,则需要转义这些点.
ton*_*uan 26
关于单引号,请参阅下面用来替换字符串代码let's有let us:
命令:
echo "hello, let's go"|sed 's/let'"'"'s/let us/g'
Run Code Online (Sandbox Code Playgroud)
结果:
你好,我们走吧
gle*_*man 12
单引号内的单引号难以逃脱.试试这个:
sed "s@['\"]http://www.\([^.]\+).com['\"]@URL_\U\1@g"
Run Code Online (Sandbox Code Playgroud)
例:
$ sed "s@['\"]http://www.\([^.]\+\).com['\"]@URL_\U\1@g" <<END
this is "http://www.fubar.com" and 'http://www.example.com' here
END
Run Code Online (Sandbox Code Playgroud)
产生
this is URL_FUBAR and URL_EXAMPLE here
Run Code Online (Sandbox Code Playgroud)
我的问题是我需要""在表达式之外使用,因为我在sed表达式中有一个动态变量.因此实际的解决方案是来自lenn jackman的那个你用"sed正则表达式替换里面的[\"].
所以我完全的打击是:
RELEASE_VERSION="0.6.6"
sed -i -e "s#value=[\"]trunk[\"]#value=\"tags/$RELEASE_VERSION\"#g" myfile.xml
Run Code Online (Sandbox Code Playgroud)
这是:
# 是sed分隔符
[\"] = "在正则表达式中
value = \"tags/$RELEASE_VERSION\" =我的替换字符串,重要的是它只有\"引号