grep 文件中一行的前 n 个和后 n 个字符

IAm*_*oid 7 grep sed awk text-processing cut

我有一个日志文件,它看起来像:

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
Run Code Online (Sandbox Code Playgroud)

我需要输出看起来像:

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
Run Code Online (Sandbox Code Playgroud)

我能做的只是 grep 行的第一部分或最后一部分。我无法将两者放在一起。如何从我的输入中获得所需的输出?

Ste*_*uch 13

您可以将 cut 用作:

命令:

cut --complement -c17-43 file1.txt
Run Code Online (Sandbox Code Playgroud)

输出:

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
Run Code Online (Sandbox Code Playgroud)


Pre*_*shi 11

你可以做这样的事情

awk '{print $1,$2,$3,":",$NF}' logfile
Run Code Online (Sandbox Code Playgroud)

  • 最好使用 `$NF` 而不是 `$10` 使其按要求工作,而不依赖于中间部分。`NF` 是指字段的数量(在这种情况下为 10)。 (2认同)

Mik*_*keD 6

您可以使用sed

sed -r "s/^(.{15} ?).*(.{5})$/\1\2/" logfile
Run Code Online (Sandbox Code Playgroud)

根据建议,我已使第一个模式容纳可能不会填充零的个位数天数,并使用.*中间模式更加灵活。