如何使用GNU工具提取并合并同一字符串的两个子字符串?

如何使用GNU工具提取并合并同一字符串的两个子字符串?

假设我在执行后得到以下结果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. -r告诉 sed 使用扩展正则表达式

  2. s|a(b)c(d)|\1:\2|表示“匹配athen bthen cthen d,并将整个内容替换为b:d(第一个和第二个括号内的项目,用:“分隔,其中a..d是:

    A。^.*/-.*从行开头 ( )^/字符的所有内容 ( ) (这就是我们使用|而不是/分隔命令子句的原因s)。

    b. [0-9]{4}-[0-9]{2}-[0-9]{2}- 一个数字 ( [0-9]) 四次 ( {4}),后跟一个-,然后再跟一个数字两次,等等。

    C。[^:]*:- 任何东西不是一个:( [^:]*),后跟一个:.

    d. .*- 其他一切。

相关内容