我有一个问题,我想解析文件的输出,我想在两个模式之间抓取第n次出现的文本,最好使用awk或sed
category
1
s
t
done
category
2
n
d
done
category
3
r
d
done
category
4
t
h
done
Run Code Online (Sandbox Code Playgroud)
让我们说这个例子我想在类别和完成之间抓取第三次出现的文本,基本上是输出
category
3
r
d
done
Run Code Online (Sandbox Code Playgroud)
这可能适合你(GNU sed):
'sed -n '/category/{:a;N;/done/!ba;x;s/^/x/;/^x\{3\}$/{x;p;q};x}' file
Run Code Online (Sandbox Code Playgroud)
使用该-n选项关闭自动打印.收集category和之间的界限done.将计数器存放在保持空间中,当它达到3时,将图案空间中的集合打印出来并退出.
或者如果你喜欢awk:
awk '/^category/,/^done/{if(++m==1)n++;if(n==3)print;if(/^done/)m=0}' file
Run Code Online (Sandbox Code Playgroud)
试着这样做:
awk -v n=3 '/^category/{l++} (l==n){print}' file.txt
Run Code Online (Sandbox Code Playgroud)
或者更神秘:
awk -v n=3 '/^category/{l++} l==n' file.txt
Run Code Online (Sandbox Code Playgroud)
如果您的文件很大:
awk -v n=3 '/^category/{l++} l>n{exit} l==n' file.txt
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10913 次 |
| 最近记录: |