繁体   English   中英

在sed和perl中替换单引号

[英]substitute single quotes in sed and perl

有人可以解释一下这两个命令发生了什么吗? 为什么sedperl使用相同的正则表达式模式给出不同的结果:

# echo "'" | sed -e "s/\'/\'/"
''
# echo "'" | perl -pe "s/\'/\'/"
'
# sed --version
sed (GNU sed) 4.5

你正在使用GNU sed,对吗? \\'是一个扩展,在GNU的基本正则表达式实现中充当字符串结尾的锚点。 因此,您在输出中看到两个引号,因为s匹配行的末尾并在行中已有的引号之后添加引号。

为了使它更明显:

echo foo | sed -e "s/\'/@/"

产生

foo@

在这里GNU sed手册中记录

编辑:perl中的等价物是\\Z (或者可能是\\z取决于您希望如何处理尾随换行符)。 因为\\'不是perl正则表达式中的特殊序列,所以它只是匹配文字引号。 正如在其他答案和注释中所提到的,在双引号字符串中转义单引号是没有必要的,正如您所发现的那样,可能会导致意外行为。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM