私は、[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}/'