web-dev-qa-db-ja.com

「文字クラスの終了]がありません」というエラーが表示されるのはなぜですか?

sedを使用して角かっこで文字列を切りたい。

[で文字列を削除したい場合、エラーを回避する方法は?例えば:

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

エラー文字クラスの終了の欠落がすでに述べているように、ここでの問題は[に関係しているため、エスケープする必要があります。それ以外の場合は、grepによって文字クラスとして理解されます。

また、入力に応じて//の代わりに/を使用する一方で、\を言っています。

まとめて、これは[Om/の後に一連の単語を出力します。

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

[は正規表現構文の特殊文字であり、 文字クラス が導入されているため、エラーが発生しています。文字列リテラルとして処理するには、エスケープする必要があります。つまり、\[

[Om/プレフィックスをremoveだけにしたい場合は、パターンに表示されない区切り文字を使用するとより簡単になります。

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