タイムスタンプとその行の正規表現

タイムスタンプとその行の正規表現

dd-mm-yyyy.HH:MM正規表現HH:MM:SSを使用してテキストファイルからタイムスタンプを抽出しましたが、そのタイムスタンプ行も取得したいと思います。あるファイルにはタイムスタンプがあり、別のファイルにはその行があれば良いでしょう。各行には複数のタイムスタンプがある可能性があるため、同じ行が複数回表示される必要があります。

これが可能であれば、タイムスタンプの周りにいくつかの単語や行を追加したい場合はどうすればよいですか?アイデアは、単にタイムスタンプを取得し、そのコンテキストを抽出することです。

現在、私はこのタスクにMatlabを使用していますが、MacOSでサポートされているすべてのUnixツールはそしてWindows用ポータブルgit bash。 Macはツアーに必要なPerl正規表現オプションをgrepサポートしていません。-P(?<![0-9])

以下は、ソースファイルと目的の出力の例です。

オリジナル:

L&L logfile

14-5-12
16-05-2012
Experiment 1
Device 77212-123-123123
Instrument 2, 34g, 66hz
Notes:
Something weird happened 12:34
Everything is fine 13:07
Log
8:00 routine 1
8:20 routine 2
8:40 routine 3, 8:45 something went south
8:50 routine 4, 8:50:12 weird peak at data

出力1:

14-5-12
16-05-2012
12:34
13:07
8:00
8:20
8:40
8:45
8:50
8:50:12

出力2:

14-5-12
16-05-2012
Something weird happened 12:34
Everything is fine 13:07
8:00 routine 1
8:20 routine 2
8:40 routine 3, 8:45 something went south
8:40 routine 3, 8:45 something went south
8:50 routine 4, 8:50:12 weird peak at data
8:50 routine 4, 8:50:12 weird peak at data

ベストアンサー1

grep -Eo '[0-9.]{10},[0-9]{2}:[0-9]{2}(:[0-9]{2})?' text.file

タイムスタンプのみが生成されます。オプションを削除すると、行-o全体が表示されます。

grep -E '[0-9.]{10},[0-9]{2}:[0-9]{2}(:[0-9]{2})?' text.file

モードが[0-9.]{10}正しい出力を生成しない場合は、より強力な出力に簡単に変更できます。([0-9]{2}\.){2}[0-9]{4}
両方の操作を同時に実行するには、次のようにします。sed例えば

sed -r '/[0-9.]{10},[0-9]{2}:[0-9]{2}(:[0-9]{2})?/w string.file
s/[^:]*([0-9.]{10},[0-9]{2}:[0-9]{2}(:[0-9]{2})?)/\1\n/;//P;D' text.file

おすすめ記事