0

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

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
4

5 回答 5

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}'
于 2013-05-28T10:12:31.520 回答
3
perl -lne 'print $1 if(/(\d+:\d+:\d+\s+\d+\/\d+\/\d+)/)' your_file
于 2013-05-28T10:11:08.493 回答
2

This might work for you (GNU sed):

sed -r 's|.*(..:..:.. ../../....).*|\1|' file
于 2013-05-28T10:47:10.857 回答
2
sed -r 's/.*start(.*)/\1/;s/-|  //g' file

或者

awk '{gsub(/-/,"",$0);print $8,$9}' file
于 2013-05-28T10:30:51.833 回答
1

打印该范围内不是的列"--"

perl -lane 'print "@{[grep { $_ ne q(--) } @F[7..$#F] ]}"' file
于 2013-05-28T15:45:32.997 回答