假设我做了以下事情
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 风格的正则表达式