gpt4 book ai didi

regex - 在 sed 和 perl 中替换单引号

转载 作者:行者123 更新时间:2023-12-01 23:09:32 25 4
gpt4 key购买 nike

谁能解释一下这两个命令发生了什么?为什么 sedperl 运行相同的正则表达式模式会给出不同的结果:

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

最佳答案

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

为了让它更明显一点:

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

生产

foo@

已记录 here ,并在 GNU sed manual

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

关于regex - 在 sed 和 perl 中替换单引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52583763/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com