我正在尝试使用 sed 将最后一次出现的两个模式之间的行打印到另一个文件中。例如,如果 file1 包含以下内容:
StartPattern
1
2
3
EndPattern
4
5
StartPattern
6
7
8
EndPattern
9
10
StartPattern
11
12
13
EndPattern
14
15
我希望输出是:
11
12
13
我怎样才能用 sed 做到这一点?
答案1
与单awk过程:
awk '/StartPattern/{ f=1;r=""; next }f && /EndPattern/{f=0}
f{ r=(r=="")? $0: r RS $0 }END{ print r }' file > output
output
文件内容:
11
12
13
选择塔克+awk解决方案:
tac file | awk '/StartPattern/{exit}/EndPattern/{f=1;next}f' | tac > output
答案2
cat file |sed -n 'H; /^StartPattern/h; ${g;p;}' |sed -e '1d' -e '/EndPattern/q' |sed '$ d'
答案3
文件包含:Patern1 line1 line2 .. linen Patern1 line1 line2 .. linen Patern1 line1 line2 .. linen Patern1 line1 line2 .. linen Patern2
图案 1 线条 1 线条 2 .. 亚麻图案 1 线条 1 线条 2 .. 亚麻图案 1 线条 1 线条 2 .. 亚麻图案 1 线条 1 线条 2 .. 亚麻图案 2 图案 1 线条 1 线条 2 .. 亚麻图案 1 线条 1 线条 2 .. 亚麻图案 1 线条 1 线条 2 .. 亚麻图案 1 线条 1 线条 2 .. 亚麻图案 2
所以这里Patern1在Patern2出现之前出现了多次。我想得到Patern1和Patern2之间的线。不是Patern1 和Patern1 之间的线。
就像:Patern1 line1 line2 .. linen Patern2 Patern1 line1 line2 .. linen Patern2 Patern1 line1 line2 .. linen Patern2
谢谢乌特帕尔