0

]私の目標は、最後の記号の後のテキストのみを表示することです。

echo MY_TEXT | grep -o "[^\]]*$"

出力は最後のシンボルです。「]」記号を任意の文字に変更すると、期待どおりに機能します。

例:

$ echo Hello World | grep -o '[^o]*$'
rld  # and this is correct!
$ echo He]ll]o Wo]rld | grep -o "[^\]]*$"
d   # but expected: rld

シンボルoとで動作が異なるのはなぜ]ですか?

前もって感謝します。

4

3 に答える 3

3

]:をエスケープする必要はありません。

echo 'He]ll]o Wo]rld' | grep -o "[^]]*$"

生産:rld

于 2013-01-03T08:09:43.773 に答える
1

いくつかのこと:[文字クラス内でエスケープする必要はありません。文字のみが一致していることを確認し、新しい行で各一致が分割されている--colorことに気付くために使用できます。-o

$ echo "He]ll]o Wo]rld" | grep -o '[^]]*$'
rld

$ echo "He]ll]o Wo]rld" | grep --color '[^]]*'
He]ll]o Wo]rld

$ echo "He]ll]o Wo]rld" | grep -o '[^]]*'
He
ll
o Wo
rld

他の多くの方法]を使用して、キャラクターを削除できます。tr

$ echo "He]ll]o Wo]rld" | tr -d ']'
Hello World
于 2013-01-03T08:12:37.083 に答える
0

エスケープ文字を削除し、それは私のために働いた。

$ echo He]ll]o Wo]rld | grep -o "[^]]*$"
> rld
于 2013-01-03T08:07:57.010 に答える