删除多行之间的两个字符串之间的文本

时间:2014-07-23 00:34:00

标签: bash sed lines

我有一个日志文件,可以在不同的行上生成时间戳和命令。我想删除时间戳并只保存" user:命令"名单。我已经尝试了几种sed排列来替换或删除字符串之间的数据,但它总是超越命令的界限。当前日志输出类似于:

USER 001
6:32am
USER 001
random bash command or output 001
USER 002
7:41am
USER 002
random bash command or output 002
USER 001
7:43am
USER 001
random bash command or output 003
USER 002
7:43am
USER 002
random bash command or output 004

期望的输出:

USER 001
random bash command or output 001
USER 002
random bash command or output 002
USER 001
random bash command or output 003
USER 002
random bash command or output 004

2 个答案:

答案 0 :(得分:1)

看起来会这样:

sed -ri 'N; /^.*\n[0-9]/d'

(假设GNU sed。)

一次处理文件两行 在每个周期:

  • sed自动将一行读入模式空间。
  • N命令将新行和下一行附加到模式空间。
  • 如果模式空间匹配"任何文本,换行符,数字",则删除 它(因此不要自动打印)。
  • 否则,自动打印。

答案 1 :(得分:1)

如果文件始终采用相同的格式,您可以删除如下所示的行:

awk 'NR%4!=1 && NR%4!=2' file
USER 001
random bash command or output 001
USER 002
random bash command or output 002
USER 001
random bash command or output 003
USER 002
random bash command or output 004

或者您可以像这样使用它:

awk '!(NR%4==1 || NR%4==2)' file