在混合列中获取时间字符串的方法

时间:2013-05-28 10:01:05

标签: perl bash sed awk

在这些混合列中获取时间字符串的方法:

new1   new11       1.1.1.1     application    id1223    831582      start   09:21:12 05/24/2013 --  --
new1   new11       1.1.1.1     application    ffd1234   1085500     start   --  --  09:21:04 05/24/2013

预期观点:

09:21:12 05/24/2013
09:21:04 05/24/2013

5 个答案:

答案 0 :(得分:4)

我真的认为你需要付出一些努力。无论如何(我的错)我无法帮助尝试grep

grep -Eo '[0-9]{2}:[0-9]{2}:[0-9]{2} [0-9]{2}/[0-9]{2}/[0-9]{4}'

我们的想法是使用以下格式获取数据NN:NN:NN NN/NN/NNNN,其中N是数字。 [0-9]{2}代表 2次[0-9]

测试

$ grep -Eo '[0-9]{2}:[0-9]{2}:[0-9]{2} [0-9]{2}/[0-9]{2}/[0-9]{4}' file
09:21:12 05/24/2013
09:21:04 05/24/2013

更短(感谢Jaypal):

grep -Eo '([0-9]{2}:){2}[0-9]{2} ([0-9]{2}/){2}[0-9]{4}'

答案 1 :(得分:3)

perl -lne 'print $1 if(/(\d+:\d+:\d+\s+\d+\/\d+\/\d+)/)' your_file

答案 2 :(得分:2)

sed -r 's/.*start(.*)/\1/;s/-|  //g' file

awk '{gsub(/-/,"",$0);print $8,$9}' file

答案 3 :(得分:2)

这可能适合你(GNU sed):

sed -r 's|.*(..:..:.. ../../....).*|\1|' file

答案 4 :(得分:1)

打印该范围内非"--"的列

perl -lane 'print "@{[grep { $_ ne q(--) } @F[7..$#F] ]}"' file