在第三次结肠发作后修剪线

时间:2016-04-11 21:59:25

标签: bash sed

我正在解析日志文件,我正在尝试清理输出。

这是一个示例输入行

2016-04-11 12:45:26 : TEXT TO REMOVE

这是我当前的代码,它会删除第一个冒号后的所有内容。

sed 's/:.*//'

输出

2016-04-11 12

我想修改它,以便它删除第三个冒号之后的所有内容(所以我最终只得到日期和时间)。

这是我想要的示例输出:

2016-04-11 12:45:26

4 个答案:

答案 0 :(得分:3)

这就是cut发明的事情:

$ cut -d':' -f1-3 file
2016-04-11 12:45:26

答案 1 :(得分:1)

如何寻找结肠周围的空间?

sed 's/ : .*//'
awk -F ' : ' '{print $1}'

答案 2 :(得分:1)

您可以使用此sed:

str='2016-04-11 12:45:26 : TEXT TO REMOVE'
sed 's/ *:[^:]*$//' <<< "$str"

即。使用[^:]*$模式确保我们匹配最后:

之后的最后一行

<强>输出:

2016-04-11 12:45:26

答案 3 :(得分:0)

严格地说,在第3 sed之后删除所有内容相当于只打印它之前的字符。 sed "s/^\([^:][^:]*:[^:][^:]*:[^:][^:]*\):.*$/\1/" 会更容易以这种方式使用。

尝试一下:

:

可以使用相同的原则仅打印sed "s/^\([0-9][0-9]*-[0-9][0-9]-[0-9][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9]\).*$/\1/g" 之前的日期时间:

{{1}}

\( \)之间的字符可以在 \ 1 的替换部分中重复使用。