我想在匹配后打印文件的头部和匹配的一些行。
我知道您可以使用sed '/PATTERN/q' FILE
打印文件,直到该模式。 sed 10q FILE
顶部打印前10行。
从这个文件开始:
lorem
ipsum
dolor
sit
amet
consectetur
adipiscing
elit
如果我的模式为dolor
并且我想再增加2行,则输出为:
lorem
ipsum
dolor
sit
amet
这是合并这两个命令的方法吗?
Alos,是否可以在文件末尾执行相同操作(即在匹配前用一些行打印文件的尾部)?
如果我保留带有模式amet
的第一个文件和匹配前的2行,则输出将为:
dolor
sit
amet
consectetur
adipiscing
elit
答案 0 :(得分:1)
$ awk '1; /dolor/{c=3} c&&(!--c){exit}' file
lorem
ipsum
dolor
sit
amet
$ tac file | awk '1; /amet/{c=3} c&&(!--c){exit}' | tac
dolor
sit
amet
consectetur
adipiscing
elit
请参阅https://stackoverflow.com/a/17914105/1745001了解如何查找与awk匹配的正则表达式周围的行。
答案 1 :(得分:0)
使用awk找到解决方案:
awk '
{
if (matched == 0) {
print;
} else if (lines > 0) {
lines--;
print;
}
}
/dolor/ {
matched = 1;
lines = 2;
}' test
答案 2 :(得分:0)
使用gnu sed
模式之后还有2行
sed '/^dolor/!b;N;N;q' infile
模式之前还有2行
sed 'N;:A;N;/\namet/!{s/[^\n]*\n//;bA };:B;N;bB' infile