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