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 replace 文字列で十分だと思いましたが、そうではありません。

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

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

答え1

グループ 2 では、 a を除く:から までの任意の文字列を一致させようとしてい:ますが、 の間にコロンが含まれているため一致しません。 を[^:]に置き換えて.みると、おそらく同じ結果が得られます。ただし、:行のどこかに がある場合は、その文字列が最後に出現するまで一致します。

しかし、おそらくもっと良いパターンは

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

関連情報