我有一个日志文件,如下所示:
Mar 23 08:20:23 New file got created in sec: 235
Mar 23 08:21:45 New file got created in sec: 127
Mar 23 08:22:34 New file got created in sec: 875
Mar 23 08:25:46 New file got created in sec: 322
Mar 23 08:26:12 New file got created in sec: 639
我需要输出如下:
Mar 23 08:20:23 : 235
Mar 23 08:21:45 : 127
Mar 23 08:22:34 : 875
Mar 23 08:25:46 : 322
Mar 23 08:26:12 : 639
我能做的就是 grep 行的第一部分或最后一部分。我无法将两者放在一起。如何从我的输入中获得所需的输出?
答案1
您可以将 cut 用作:
命令:
cut --complement -c17-43 file1.txt
输出:
Mar 23 08:20:23 : 235
Mar 23 08:21:45 : 127
Mar 23 08:22:34 : 875
Mar 23 08:25:46 : 322
Mar 23 08:26:12 : 639
答案2
你可以做这样的事情
awk '{print $1,$2,$3,":",$NF}' logfile
答案3
您可以使用sed
:
sed -r "s/^(.{15} ?).*(.{5})$/\1\2/" logfile
根据建议,我使第一个模式适应可能不是零填充的个位数日期,并用于.*
中间模式以更加灵活。
答案4
这个怎么样:
sed -e 's/^\(.\{4\}\).*\(.\{4\}\)$/\1 \2/'
(您可以计算出 I/O 重定向或给出文件名等。有关更多调用信息,请参阅 sed(1)。)
在这里,我选择的字符数正好是 4 个,但您可以替换为您喜欢的任何数字。请注意,第一个和最后一个字符数甚至可以不同:
sed -e 's/^\(.\{5\}\).*\(.\{2\}\)$/\1 \2/'
这将返回每行的前 5 个字符和最后 2 个字符。我将让您弄清楚如何进一步参数化它。
另请注意,我选择了 sed(1) 而不是 grep(1)(或其变体之一)。我知道这可能不是您想要的,因为您确实要求 grep 正则表达式,而不是 sed 正则表达式。