【问题标题】:sed find and replace with curly bracessed 查找并替换为大括号
【发布时间】:2012-03-01 14:48:40
【问题描述】:

我正在尝试使用这个命令:

sed -i 's#\{test1\}#test2#' /example/myfile.txt

{test1} 的实例替换为test2

我得到错误:

sed: -e expression #1, char 17: Invalid preceding regular expression

我没有正确地转义花括号吗?

【问题讨论】:

  • 嗯..我删除了反斜杠,它似乎工作正常。

标签: sed


【解决方案1】:
sed -i 's#{test1}#test2#' /example/myfile.txt

你不需要转义{}

【讨论】:

    【解决方案2】:

    你根本没有逃避花括号。在sed中,默认的正则表达式为BRE,其中\{\}表示范围表达式。由于 test1 不是范围,因此您的 BRE 不正确。

    要修复它,您可以删除反斜杠(大括号在 BRE 中并不特殊)或保持不变并告诉 sed 使用 ERE(-r 带有 GNU sed 的标志,-E 带有 BSD/MacOSX 的标志sed)。

    【讨论】:

    • 直到 BRE ERE。 BRE 在sed 世界中非常方便。
    • TIL:BRE:基本正则表达式,ERE:扩展正则表达式; TIL:今天我学到了:)
    猜你喜欢
    • 2014-03-09
    • 2012-06-24
    • 2019-03-10
    • 2014-06-14
    • 1970-01-01
    • 2016-11-25
    • 1970-01-01
    • 2017-04-07
    • 2017-09-07
    相关资源
    最近更新 更多