为什么我会收到“字符类缺少终止符 ]”的错误?

为什么我会收到“字符类缺少终止符 ]”的错误?

我想使用 剪切带括号的字符串sed

如果我想用 删除字符串,如何避免错误[?例如:

$ echo '[Om/mystring' | grep -oP '(?<=[Om\\)\w+'
grep: missing terminating ] for character class

答案1

由于错误字符类缺少终止符 ]已经说了,这里的问题与有关[,您需要对其进行转义。否则,grep 会将其理解为字符类。

另外,您说的是//,但您想根据您的输入使用/而不是。\

总之,这会打印一组单词[Om/

$ echo '[Om/mystring' | grep -oP '(?<=\[Om\/)\w+'
mystring

答案2

您收到错误是因为[在正则表达式语法中是一个特殊字符,引入了字符类。要被视为字符串文字,必须对其进行转义,即\[

如果你只是想消除前缀[Om/,那么如果使用未出现在模式中的分隔符,则 sed 更简单:

$ echo '[Om/mystring' | sed 's;\[Om/;;'
mystring

相关内容