linux输出两个pattern之间的内容

2019-10-11  本文已影响0人  caokai001

目的:需要匹配PAT1 PAT2 之间内容
使用awk sed or python 都可以快速解决此问题。
参考链接

(py3) [kcao@h1-lgl ~]$ cat text.txt 
1
2
PAT1
3    - first block
4
PAT2
5
6
PAT1
7    - second block
PAT2
8
9
PAT1
10    - third block
(py3) [kcao@h1-lgl ~]$ awk '/PAT1/,/PAT2/' text.txt 
PAT1
3    - first block
4
PAT2
PAT1
7    - second block
PAT2
PAT1
10    - third block




思考:当需要匹配内容是动态,是否可以将awk 里PAT1,PAT2 改成变量来实现,测试如下:

目的:text2.txt文件有很多行,只需要匹配TF1 URL之间内容,以及TF3 URL之间内容。text2.txt 内容如下:


(py3) [kcao@h1-lgl ~]$ cat text2.txt 
TF1
3    - first block
4
URL

TF2
7    - second block
URL

TF3
10    - third block
URL
...
(py3) [kcao@h1-lgl ~]$ echo -e "TF1\nTF3"|while read id;do awk -v T=$id '/$T/,/URL/' text2.txt;done
(py3) [kcao@h1-lgl ~]$ 
(py3) [kcao@h1-lgl ~]$ echo -e "TF1\nTF3"|while read id;do echo $id|xargs -i awk  '/{}/,/URL/' text2.txt;done
TF1
3    - first block
4
URL
TF3
10    - third block
URL
(py3) [kcao@h1-lgl ~]$ 



总结:awk '/str/'其中str 需要是字符串,不是变量。当我们需要动态的匹配 可以使用xargs -i awk '/{}/'来实现。

上一篇 下一篇

猜你喜欢

热点阅读