我想使用 剪切带括号的字符串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