
実行後、次の結果が得られたとします。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|'
...作業する必要があります。詳細:
-r
sedに使用するように指示する拡張正規表現。s|a(b)c(d)|\1:\2|
これは、「matcha
thenb
then 」c
とd
全体の内容をb:d
(角かっこ内の最初と2番目の項目、「で:
区切った」)に置き換えることを意味します。ここでa
..d
は次のようになります。ㅏ。
^.*/
-.*
行の先頭( )^
から文字( )までの/
すべての内容(したがって、区切りコマンドの|
代わりに使用します)。/
s
b。
[0-9]{4}-[0-9]{2}-[0-9]{2}
- 数字([0-9]
)が4回{4}
、その後に数字-
が2回、そのように続きます。氏。
[^:]*:
- 何もないいいえa:
([^:]*
)の後に:
。d。
.*
- 他のすべて。