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

如何在sed中转义字符类中的]char,sed,escaping,substitution,Sed,Escaping,Substitution,echo“eh]”sed-r's/[\]a]/lol/g'返回eh]而不是ehlol。没有出现错误,因此我认为\]是一种sed魔术。我厌倦了不断的sed问题,但我必须使用它。那么如何在sed替换表达式中转义]呢?您可以简单地使用echo“eh]”| sed-r的/[]a]/lol/g': 没有反斜杠 和]作为括号内的第一个字符 ]和\在括号内使用时有一些特殊性。 让我引述: 前导“^”反转列表的含义,使其匹配列表中不存在的任何单个字符要将]包括在列表中,请将其作为第一个字符(如果需要,^之后

echo“eh]”sed-r's/[\]a]/lol/g'
返回
eh]
而不是
ehlol
。没有出现错误,因此我认为
\]
是一种sed魔术。我厌倦了不断的sed问题,但我必须使用它。那么如何在sed替换表达式中转义]呢?

您可以简单地使用
echo“eh]”| sed-r的/[]a]/lol/g'

  • 没有反斜杠
  • ]
    作为括号内的第一个字符
]
\
在括号内使用时有一些特殊性。 让我引述:

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

字符
$,*,,,[,
\
在列表中通常是不特殊的。例如,
[\*]
匹配“\”或“*”,因为\在这里不特殊。但是像[.ch.],[=a=]和[:空格:]这样的字符串在列表中是特殊的,分别表示排序符号、等价类和字符类,因此,[后跟.、=、或:]时在列表中是特殊的。此外,当未处于POSIXLY_正确模式时,特殊转义符(如\n和\t)在列表中被识别。请参阅转义符


使用
echo“eh]”sed-r's/[]a]/lol/g'
(不带反斜杠)。请参见sed info文档中
正则表达式一章中关于
`内部无特殊
[`
]
的说明,谢谢,但它似乎仅在
]
是字符类中的第一个字符时才起作用。例如,
[a]b]
设备不工作。我非常希望不要被迫这样做。还有其他解决方案吗?@不,是的,必须在第一个位置。阅读手册请仔细阅读上述文件。它清楚地指出,
]
必须是字符类中的第一个字符,才能不被视为类的结尾。@不,这与正则表达式有关,而不是特定于sed。。同样的约束也适用于grep、awk、perl、etcwrt
字符类括号
——您混合了两个术语。本文讨论的是括号表达式,而不是字符类。可以在括号表达式中使用字符类,但它们是两个独立的东西。字符类将是
[:alpha:][/code>,包含字符类的括号表达式将是
[:alpha:][]
,包含依赖于区域设置的类似字符范围而不是字符类的括号表达式将是
[A-zA-Z]