从文本文件中过滤空“标题”

从文本文件中过滤空“标题”

假设我做了以下事情

grep 'header\|error'

现在我想删除所有空标题“部分”。例如,我想要这个输出

header 1
header 2
error a
error b
header 3
error c
header 4
header 5
error d

成为

header 2
error a
error b
header 3
error c
header 5
error d

答案1

假设您的输入如图所示,即所有输入行都是“标题”或“错误”行,没有别的......

这将起作用:

$ cat test.sh
grep -B1 --no-group-separator ^error << EOF
header 1
header 2
error a
error b
header 3
error c
header 4
header 5
error d
EOF
$ ./test.sh 
header 2
error a
error b
header 3
error c
header 5
error d

该脚本打印以“error”开头的每一行,并打印其之前的行。

答案2

作为起点,你可以这样玩:

grep -zoP 'header.*\nerror.*\n|error.*\n' file.txt
  • -z- 将文件视为一行,这样您就可以执行 '\n'
  • -o- 只打印匹配的文本
  • -P- 启用 Perl 风格的正则表达式

相关内容