假设我在执行后得到以下结果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|
表示“匹配a
thenb
thenc
thend
,并将整个内容替换为b:d
(第一个和第二个括号内的项目,用:
“分隔,其中a
..d
是:A。
^.*/
-.*
从行开头 ( )^
到/
字符的所有内容 ( ) (这就是我们使用|
而不是/
分隔命令子句的原因s
)。b.
[0-9]{4}-[0-9]{2}-[0-9]{2}
- 一个数字 ([0-9]
) 四次 ({4}
),后跟一个-
,然后再跟一个数字两次,等等。C。
[^:]*:
- 任何东西不是一个:
([^:]*
),后跟一个:
.d.
.*
- 其他一切。