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

如何在sed中转义字符类中的]字符

  •  0
  • nah  · 技术社区  · 8 年前

    echo "eh]" | sed -r 's/[\]a]/lol/g' 返回 eh] 而不是 ehlol .不会出现错误,因此我假设 \] 是某种sed魔法。我厌倦了不断的sed问题,但我必须使用它。那么如何在sed替换表达式中转义“]?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Community basarat    4 年前

    您可以简单地使用 echo "eh]" | sed -r 's/[]a]/lol/g' :

    • 没有反斜杠
    • ] 作为括号内的第一个字符。

    ] \ 在支架内使用时具有一些特殊性。 让我引用 documentation :

    前导“^”反转列表的含义,使其匹配列表中不包含的任何单个字符。 要将“]包括在列表中,请将其作为第一个字符 (如果需要,在“^”之后),要将-包括在列表中,请将其作为第一个或最后一个;要包含^,请将其放在第一个字符之后。

    人物 $, *, ., [, \ 通常 不特别 在列表中。例如 [\*] 匹配\或*,因为\在这里不是特别的。但是,像[.ch.]、[=a=]和[:space:]这样的字符串在列表中是特殊的,分别表示排序符号、等价类和字符类,因此[在列表中后跟.、=、或:]时是特殊的。此外,当不处于POSIXLY_CORRECT模式时,在列表中识别像\n和\t这样的特殊转义符。请参见转义符。