grep:認識されたフラグではありません。 :o

grep:認識されたフラグではありません。 :o

正規表現を使用して、AIXのログファイル文字列(下のコード)から日付とタイムスタンプを抽出し、$Dataそれを次のテキストファイルにロードしようとしています。

Data="Logs/2018-12-03/log.txt:3:2018-12-03 00:00:04,333 452621453 [blah blah blah"
echo "$data" | grep -o -n '[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1]) (2[0-3]|[01][0-9]):[0-5][0-9]' >  timestamps.txt

ホストのUnixバージョンが古すぎてオプションが認識されないため、次のエラーが発生する可能性があります-o。機能を実行する他の方法はありますか-o

grep: Not a recognized flag: o
Usage: grep [-r] [-R] [-H] [-L] [-E|-F] [-c|-l|-q] [-insvxbhwyu] [-p[parasep]] -e pattern_list...
    [-f pattern_file...] [file...]
Usage: grep [-r] [-R] [-H] [-L]  [-E|-F] [-c|-l|-q] [-insvxbhwyu] [-p[parasep]] [-e pattern_list...]
    -f pattern_file... [file...]
Usage: grep [-r] [-R] [-H] [-L] [-E|-F] [-c|-l|-q] [-insvxbhwyu] [-p[parasep]] pattern_list [file...]

ベストアンサー1

-o実装が正規表現を認識しても機能しませんgrep。また、-E拡張正規表現を有効にする必要があります。おそらくあなたが持っていると仮定すると、perl次のことを試すことができます。

$ Data="Logs/2018-12-03/log.txt:3:2018-12-03 00:00:04,333 452621453 [blah blah blah"
$ echo "$Data" | perl -lne '/[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1]) (2[0-3]|[01][0-9]):[0-5][0-9]/ && print "$.:$&"'
1:2018-12-03 00:00

しかし、正規表現をそのように複雑にする必要がありますか?これほど十分ではありませんか?

$ echo "$Data" | perl -lne '/\d{4}-\d{2}-\d{2} \d{2}:\d{2}/ && print "$.:$&"'
1:2018-12-03 00:00

おすすめ記事