GNUツールを使用して同じ文字列の2つの部分文字列を抽出してマージする方法は?

GNUツールを使用して同じ文字列の2つの部分文字列を抽出してマージする方法は?

実行後、次の結果が得られたとします。grep "emailed"

/home/John/logs/2013-07-10.171222-0400EDT.html:I have emailed Mark. Thanks

私の出力が次のように見えるように日付を抽出したいと思います。

2013-07-10:I have emailed Mark. Thanks

どのようなGNUツールを使用してこれを行うにはどうすればよいですか?特に、grepの出力をこのツールにパイプしたいと思います。私はこれがこれを行うためのツールかもしれないと思いますsedが、どうなるかはよくわかりません。

ベストアンサー1

これ:

$ <grep-command> | sed -r 's|^.*/([0-9]{4}-[0-9]{2}-[0-9]{2})[^:]*:(.*)|\1:\2|'

...作業する必要があります。詳細:

  1. -rsedに使用するように指示する拡張正規表現

  2. s|a(b)c(d)|\1:\2|これは、「match athen bthen 」cd全体の内容をb:d(角かっこ内の最初と2番目の項目、「で:区切った」)に置き換えることを意味します。ここでa..dは次のようになります。

    ㅏ。^.*/-.*行の先頭( )^から文字( )までの/すべての内容(したがって、区切りコマンドの|代わりに使用します)。/s

    b。[0-9]{4}-[0-9]{2}-[0-9]{2}- 数字([0-9])が4回{4}、その後に数字-が2回、そのように続きます。

    氏。[^:]*:- 何もないいいえa :[^:]*)の後に:

    d。.*- 他のすべて。

おすすめ記事