我有一个日志文件,像;
A
some lines
some lines
Z
A
some lines
some lines
IMPORTANT text
some lines
Z
A
some lines
more lines
some lines
Z
A
some lines
IMPORTANT text
more lines
some lines
Z
Run Code Online (Sandbox Code Playgroud)
如果它有重要的单词,我只需要AZ之间的行.所以期望的输出是;
A
some lines
some lines
IMPORTANT text
some lines
Z
A
some lines
IMPORTANT text
more lines
some lines
Z
Run Code Online (Sandbox Code Playgroud)
AZ之间的行数是可变的.我尝试了太多的命令,如:
grep 'IMPORTANT' -A 3 -B 3 x.log | sed -n '/^A$/,/^Z$/p'
grep 'IMPORTANT' -A 3 -B 3 x.log | grep -E '^Z$' -B 5 | grep -E '^A$' -A 5
Run Code Online (Sandbox Code Playgroud)
一些印刷不需要来自另一组的线,其他印刷线没有起点或终点......而且都失败了.
有没有办法用一个班轮做这个?
使用gnu-awk你可以做到:
awk 'BEGIN{RS=ORS="\nZ\n"} /^A/ && /IMPORTANT/' file
A
some lines
some lines
IMPORTANT text
some lines
Z
A
some lines
IMPORTANT text
more lines
some lines
Z
Run Code Online (Sandbox Code Playgroud)
BEGIN{RS=ORS="\nZ\n"}将输入广告输出记录分隔Z符设置为两侧的换行符./^A/ && /IMPORTANT/确保每条记录以其开头A并具有IMPORTANT.awk