代码之家  ›  专栏  ›  技术社区  ›  Cyker

在sed和perl中替换单引号

  •  3
  • Cyker  · 技术社区  · 8 年前

    有人能解释一下这两个命令是怎么回事吗?为什么 sed perl 运行相同的正则表达式模式得到不同的结果:

    # echo "'" | sed -e "s/\'/\'/"
    ''
    # echo "'" | perl -pe "s/\'/\'/"
    '
    # sed --version
    sed (GNU sed) 4.5
    
    1 回复  |  直到 8 年前
        1
  •  8
  •   Shawn    8 年前

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

    更明显的是:

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

    生产

    foo@
    

    记录 here ,在 GNU sed manual

    Edit:在perl中的等价物是 \Z (或者 \z 取决于您希望如何处理尾随换行符)。自 \'