用额外的行显示所有文件直到匹配
Show all the file up to the match with extra lines
我想打印一个文件的头部直到匹配和匹配之后的一些行。
我知道你可以使用sed '/PATTERN/q' FILE
打印文件直到图案。 sed 10q FILE
top 打印前 10 行。
从这个文件开始:
lorem
ipsum
dolor
sit
amet
consectetur
adipiscing
elit
如果我的模式是 dolor
并且我还想要 2 行,输出将是:
lorem
ipsum
dolor
sit
amet
这是合并这两个命令的方法吗?
Alos,是否可以对文件末尾执行相同的操作(即在匹配前打印文件尾部的一些行)?
如果我保留第一个文件的模式 amet
和匹配前的两行,输出将是:
dolor
sit
amet
consectetur
adipiscing
elit
找到了 awk 的解决方案:
awk '
{
if (matched == 0) {
print;
} else if (lines > 0) {
lines--;
print;
}
}
/dolor/ {
matched = 1;
lines = 2;
}' test
灵感来自:
$ 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
请参阅 了解如何使用 awk 查找围绕正则表达式匹配的行。
使用 gnu sed
模式后还有 2 行
sed '/^dolor/!b;N;N;q' infile
模式前还有 2 行
sed 'N;:A;N;/\namet/!{s/[^\n]*\n//;bA };:B;N;bB' infile
我想打印一个文件的头部直到匹配和匹配之后的一些行。
我知道你可以使用sed '/PATTERN/q' FILE
打印文件直到图案。 sed 10q FILE
top 打印前 10 行。
从这个文件开始:
lorem
ipsum
dolor
sit
amet
consectetur
adipiscing
elit
如果我的模式是 dolor
并且我还想要 2 行,输出将是:
lorem
ipsum
dolor
sit
amet
这是合并这两个命令的方法吗?
Alos,是否可以对文件末尾执行相同的操作(即在匹配前打印文件尾部的一些行)?
如果我保留第一个文件的模式 amet
和匹配前的两行,输出将是:
dolor
sit
amet
consectetur
adipiscing
elit
找到了 awk 的解决方案:
awk '
{
if (matched == 0) {
print;
} else if (lines > 0) {
lines--;
print;
}
}
/dolor/ {
matched = 1;
lines = 2;
}' test
灵感来自:
$ 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
请参阅 了解如何使用 awk 查找围绕正则表达式匹配的行。
使用 gnu sed
模式后还有 2 行
sed '/^dolor/!b;N;N;q' infile
模式前还有 2 行
sed 'N;:A;N;/\namet/!{s/[^\n]*\n//;bA };:B;N;bB' infile