逃避单引号

sha*_*nuo 30 sed

以下是按预期工作.我想用''替换"我"这个词

 echo "test ' this" | sed 's/'"'"'/me/g'
test me this
Run Code Online (Sandbox Code Playgroud)

预期结果:

test \' this
Run Code Online (Sandbox Code Playgroud)

是否有可能在同一个命令中转义双引号?

pax*_*blo 47

您的问题有点令人困惑,因为me原始字符串中没有要替换的.但是,我想我拥有它.让我解释一下:

我有一个sed命令可以成功地用'单词替换单引号me.我想要一个类似的,可以用字符序列替换它\'.

如果是这种情况(你只想逃避单引号),你可以使用:

pax$ echo "test ' this" | sed "s/'/\\\'/g"
test \' this
Run Code Online (Sandbox Code Playgroud)

通过在sed命令周围使用双引号,您无需担心嵌入的单引号.然后必须担心转义,因为shell会吸收一级转义,因此sed会看到:

s/'/\'/g
Run Code Online (Sandbox Code Playgroud)

将根据需要转换'\'.

如果你想要一种单一双引号转义的方法,sed最简单的方法是提供多个命令,sed这样你就可以使用备用引号:

pax$ echo "Single '" 'and double "'
Single ' and double "

pax$ echo "Single '" 'and double "' | sed -e "s/'/\\\'/g" -e 's/"/\\"/g'
Single \' and double \"
Run Code Online (Sandbox Code Playgroud)

如果我误解了您的要求,可以举几个例子.


ack*_*ser 12

我对你的问题有些怀疑,但无论如何,我的解决方案对任何人都有用.

我们先告诉我们:

这意味着一个\,因为当你把两个放在一起时,你正在取消其作为元字符的含义.并且\ x27作为单引号,至少对我而言比单个双引号更容易...

最后我说

echo "test me this" | sed 's/me/\\\x27/g'
Run Code Online (Sandbox Code Playgroud)

所以在这里你测试我==>测试这个

   echo "test \' this" | sed 's/\\\x27/me/g'
Run Code Online (Sandbox Code Playgroud)

这是相反的.


pot*_*ong 7

你是这个意思吗?:

# cat <<! | sed 's/["'"'"']/\\&/g'
> quote '
> double quotes "
> quote ' double quotes "
> !
quote \'
double quotes \"
quote \' double quotes \"
Run Code Online (Sandbox Code Playgroud)

或这个:

# echo "test me test"|sed 's/me/\\'"'"'/g'
test \' test
# echo "test me test"|sed 's/me/\\"/g'
test \" test
Run Code Online (Sandbox Code Playgroud)

我总是最好在命令行上单引号sed/awk/perl ...命令,并为其中使用的双引号参数制作"漏洞".