sed 文字列が一致しません。なぜ?

sed 文字列が一致しません。なぜ?

[DEBUG]私はステートメントを含み、その後に文字列で終わる文字列と一致するものを探しています。後ろに": "複数の文字列がある場合は、": "最初の文字列と一致させたいと思います。次に、ドアと[DEBUG]最初のドアの横にあるコンテンツに色を付けることをお勧めします": "

例は次のとおりです。

  [thread1] [DEBUG] [2017.03.12 23:22:12] com.abc.def.Xyz: some log message: some more specific info.

次のように翻訳する必要があります。

  [thread1] ${RED}[DEBUG]${DEFAULT} [2017.03.12 23:22:12] com.abc.def.Xyz: ${RED}some log message.${DEFAULT}

これを行うには、次のsed代替文字列で十分だと思いましたが、そうではありません。

sed -r "s/(\[DEBUG\])([^:]*: )(.*)$/${RED}\1${DEFAULT}\2${RED}\3{$DEFAULT}/"

私はこれに時間を無駄にしましたが、残念ながら上記の文字列と一致しません。理由についての手がかりはありますか?

ベストアンサー1

:グループ2の場合、aを除くすべてをaと一致させようとしますが、:時間にコロンがあり、一致しません。行に他の場所がない場合は、に置き換えると[^:]同じ結果が得られ、その文字列が最後に表示されるまで一致します。.:

しかし、おそらくより良いパターンは次のとおりです。

sed -r 's/(\[DEBUG])( \[[[:digit:].: ]*] [^:]*: )(.*)/${RED}\1${DEFAULT}\2${RED}\3${DEFAULT}/'

おすすめ記事