Bash sed中的引号和反斜杠
我想用sed替换一个字符串,如下所示:Bash sed中的引号和反斜杠,bash,sed,escaping,Bash,Sed,Escaping,我想用sed替换一个字符串,如下所示: \'string\' 包括\和'在内。我想替换为,假设quotedstring,但尝试了许多使用转义的方法都没有成功。不起作用的示例: sed“s:\'string\':quotedstring:g” sed“s:\\'string\\':quotedstring:g” sed's:\\'string\\\':quotedstring:g' sed's:\\'string\\':quotedstring:g' 您的示例中存在的问题: sed's:
\'string\'
包括\
和'
在内。我想替换为,假设quotedstring,但尝试了许多使用转义的方法都没有成功。不起作用的示例:
sed“s:\'string\':quotedstring:g”
sed“s:\\'string\\':quotedstring:g”
sed's:\\'string\\\':quotedstring:g'
sed's:\\'string\\':quotedstring:g'
您的示例中存在的问题:
不能在单引号内使用单引号sed's:foo:bar:g'
'
如果反斜杠后面的字符在双引号sed“s:\'string\':替换:g“
中没有特殊意义,”
将不会删除它。因此,bash
将真正接收sed
是\
中的特殊序列,请参阅sed
这次sed“s:\\'string\\”:替换:g“
将bash
更改为\
。但是,\
将再次获得sed
。其效果与前面的示例相同\'
\
,以转义特殊序列\'
这个也会工作。sed“s:\\\\\\'string\\\\':replace:g“
会将bash
更改为\\\\\\\
,并且\\
会收到sed
。特殊的转义序列,就像您需要的那样\\\\\'
哎哟,5个或更多的反斜杠已经太多了sed“s:\\\'string\\\\\:替换:g”
- 但是我真的想使用单引号:在这种情况下,你需要在任何你想插入文字的地方打断单引号。:
sed's:\\\'\'\'\'''string\\''''''':replace:g'
\
必须被引用,即\
,单引号必须暴露在shell中,然后被引用,即'
到\
。要减少错误的可能性,请在后续实例中,在初始字符串后使用分组和反向引用
注意:如果sed调用是单引号的,那么命令必须首先用单引号结束,然后在shell中引用,命令的其余部分用单引号括起来,即
sed的/…'\'\'''./…/'文件
您能给我们展示一些这样的文本的真实示例吗?您最后的尝试可以修改为sed的:\\\x27string\\\\\x27:quotedstring:g'
。但这需要一个理解十六进制转义的sed版本。尽管如此,我的答案中已经包括了这一点(在单引号中使用“
”)@PesaThe抱歉,我猜我是在你修改答案时开始回答的。我已经改进了我的答案,以便增加价值。一点也不担心!:)我我只是想避免重复回答。我喜欢你的新方法。
sed "s/\\\'string\\\'/replace/"
sed 's/\(\\'\''\)string\1/quotedstring/' file