Unix 查找并替换:\';

Unix 查找并替换:\';,unix,sed,Unix,Sed,我试图用替换\'的每个引用在文件中 我使用了以下变体:sed-es/\'/“\'”/g file.txt 但是他们总是会取代每一个 任何帮助都将不胜感激。不确定这是最好的解决方案,我可以这样做: sed "s/[\]'/\"\'\"/g" file.txt (将反斜杠字符放在字符范围内,使其不会干扰以下引号,并使用双引号进行保护) 或者只是扩展语法,不加引号,但使用几乎相同的技巧: sed -e s/[\\]\'/"\'"/g file.txt

我试图用
替换
\'
的每个引用在文件中

我使用了以下变体:
sed-es/\'/“\'”/g file.txt

但是他们总是会取代每一个


任何帮助都将不胜感激。

不确定这是最好的解决方案,我可以这样做:

sed "s/[\]'/\"\'\"/g" file.txt
(将反斜杠字符放在字符范围内,使其不会干扰以下引号,并使用双引号进行保护)

或者只是扩展语法,不加引号,但使用几乎相同的技巧:

sed -e s/[\\]\'/"\'"/g file.txt

一种试图尽可能保留sed命令的“单引号”的方法:

sed 's/\\'"'"'/\'/g'
只需使用
\\
转义
\
,并使用
'''''''''
将一个单引号插入命令中:到目前为止,第一个单引号结束命令,然后我们有一个双引号(
''
),最后是命令其余部分的一个单引号

或者,双引号引用整个命令并转义反斜杠和单引号:

sed "s/\\\'/\'/g"
正确的语法是:

$ echo "foo'bar" | sed 's/'\''/\'/'
foo'bar
每个脚本(sed、awk,无论什么)都应该始终用单引号括起来,您只需使用其他单引号停止/重新启动脚本分隔符,就可以将脚本中绝对必要的最小部分拆分到shell中,在这种情况下,其长度足以使用
\
。您需要跳转到shell来指定
'
,因为根据shell规则,
'
中包含的脚本不能包含
'
,即使您尝试转义它也不行

echo "foo'bar" | gawk '{gsub(/\47/,"\\'")}1'

foo'bar
这里棘手的部分是用符号替换单个引号。 首先,为了使单引号易于管理,请使用其八进制 在此处编码\47,然后用两个反斜杠转义和。突然之间
它变得可行:)

那些单引号简直是地狱!是的,我在命令行方面也有点笨:P再次感谢你的帮助!!很高兴知道,我曾尝试过类似于
\\\'
的方法试图让它转义(认为它可以同时转义反斜杠和单引号,但它不起作用。谢谢你的洞察力!@Corey它实际上对我使用
sed“s/\\'/\'/g”很有效
,我要加上它。奇怪-我发誓我试过了,但没有用。也许我的引号不合适。#sednoob你想在替换中使用双引号吗,如在
“'”
?双引号是我试图让它逐字显示的(作为字符串而不是作为正则表达式解析)。我想它们可能不需要。啊,好吧。在你的版本中,它们不会出现,但如果你引用整个命令,它们会出现。虽然这个代码片段可能会解决这个问题,但确实有助于提高你文章的质量。请记住,你是在将来为读者回答这个问题,那些人可能不知道原因请不要用解释性的注释挤满你的代码,这会降低代码和解释的可读性!