日付を見つけた後にのみ行を分割する方法

日付を見つけた後にのみ行を分割する方法

私のファイルには次の内容があります。

Thu_Jun_04_09:30:22_2020=some_string:some_string=Thu_Jun_04_09:32:04_2020=some_str:some_string=some_string=Thu_Jun_04_09:35:05_2020=some_str:some_string,some_str

日付が見つかった場合にのみこの行を分割したいと思います。ただし、日付形式は常に同じですが、日付は変更されることがあります。だから私は次の形式で出力したいと思います。

Thu_Jun_04_09:30:22_2020=some_string:some_string
Thu_Jun_04_09:32:04_2020=some_str:some_string=some_string
Thu_Jun_04_09:35:05_2020=some_str:some_string,some_str

行間に文字列を追加できますが、日付が見つかった場合にのみ文字列を分割する必要があることを検討してください。

ベストアンサー1

次の正規表現パターンは日付形式と一致します。

((Mon|Tue|Wed|Thu|Fri|Sat|Sun)_(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)_[0-9]+_[0-9]+:[0-9]+:[0-9]+_[0-9]+)

GNUを使用すると、各日付の前に1つずつ追加sedできます。\n

echo "Thu_Jun_04_09:30:22_2020=some_string:some_string=Thu_Jun_04_09:32:04_2020=some_str:some_string=some_string=Thu_Jun_04_09:35:05_2020=some_str:some_string,some_str"\
     | sed -Ee 's/((Mon|Tue|Wed|Thu|Fri|Sat|Sun)_(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)_[0-9]+_[0-9]+:[0-9]+:[0-9]+_[0-9]+)/\n\1/g'

最初に作成された空白行が面倒な場合は、パイプで接続できます。sed -e '/^$/d'

おすすめ記事