両方の日付形式を受け入れるログファイルからDATEフィールドのみを抽出するsedの正規表現を作成するにはどうすればよいですか?
Jun 9 16:56:14 mailserver postfix ...
2017-06-04T06:59:36.984086+02:00 mailserver postfix ...
awkを使用して$ 1列を印刷すると、2番目の場合は機能しますが、1番目の場合は機能しません。
ベストアンサー1
この試み:
$ cat test.txt
Jun 9 16:56:14 mailserver postfix ...
2017-06-04T06:59:36.984086+02:00 mailserver postfix ...
$ sed 's/^\([0-9:+\.T\-]*\|[A-Z][a-z]*\s*[0-9]*\s[0-9:]*\)\s.*/\1/' < test.txt
Jun 9 16:56:14
2017-06-04T06:59:36.984086+02:00
説明する:
- 行の先頭を一致させます。
^
- バックスラッシュ括弧を使用して、関心領域を代替項目の逆参照として含めます(下記参照)。つまり、「残りのログテキスト」の前の「日付」
- 括弧内:2つのバリアントと一致します(
\|
2つのサブ表現の置換を表すために使用されます)。 - 括弧の後:残りの行を捨てたいので、行の残りの部分と一致します(最初は少し直観に反しているようですが、次の点を参照してください)。
- 変えるワイヤー(したがって、残りの部分を一致させます。)日付一致の逆参照:
\1