![为什么我会收到“字符类缺少终止符 ]”的错误?](https://linux22.com/image/1062908/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E4%BC%9A%E6%94%B6%E5%88%B0%E2%80%9C%E5%AD%97%E7%AC%A6%E7%B1%BB%E7%BC%BA%E5%B0%91%E7%BB%88%E6%AD%A2%E7%AC%A6%20%5D%E2%80%9D%E7%9A%84%E9%94%99%E8%AF%AF%EF%BC%9F.png)
我想使用 剪切带括号的字符串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