我正在解析日志文件,我正在尝试清理输出。
这是一个示例输入行
2016-04-11 12:45:26 : TEXT TO REMOVE
这是我当前的代码,它会删除第一个冒号后的所有内容。
sed 's/:.*//'
输出
2016-04-11 12
我想修改它,以便它删除第三个冒号之后的所有内容(所以我最终只得到日期和时间)。
这是我想要的示例输出:
2016-04-11 12:45:26
答案 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 的替换部分中重复使用。