假设您想使用GNU将整个行与您的模式匹配sed
,则可以这样做:
sed -n '/^dog 123 4335$/ { :a; n; p; ba; }' infile
等效标准:
sed -ne '/^dog 123 4335$/{:a' -e 'n;p;ba' -e '}' infile
使用以下输入(infile
):
cat 13123 23424
deer 2131 213132
bear 2313 21313
dog 123 4335
cat 13123 23424
deer 2131 213132
bear 2313 21313
输出为:
cat 13123 23424
deer 2131 213132
bear 2313 21313
说明:
/^dog 123 4335$/
搜索所需的模式。
:a; n; p; ba;
是一个循环,该循环从输入(n
)获取新行,将其打印(p
),然后分支回到标签a :a; ...; ba;
。
更新资料
这是一个更贴近您需求的答案,即file2中的模式,从file1中grepping:
tail -n +$(( 1 + $(grep -m1 -n -f file2 file1 | cut -d: -f1) )) file1
嵌入式grep和cut从file2中找到包含模式的第一行,此行号加一个传递到尾部,那里加一个以跳过包含模式的行。
如果要从最后一场比赛而不是第一场比赛开始,那就是:
tail -n +$(( 1 + $(grep -n -f file2 file1 | tail -n1 | cut -d: -f1) )) file1
请注意,并非所有版本的tail都支持加号。