[英]substitute single quotes in sed and perl
有人可以解释一下这两个命令发生了什么吗? 为什么sed
和perl
使用相同的正则表达式模式给出不同的结果:
# 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@
编辑:perl中的等价物是\\Z
(或者可能是\\z
取决于您希望如何处理尾随换行符)。 因为\\'
不是perl正则表达式中的特殊序列,所以它只是匹配文字引号。 正如在其他答案和注释中所提到的,在双引号字符串中转义单引号是没有必要的,正如您所发现的那样,可能会导致意外行为。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.