美文网首页
linux输出两个pattern之间的内容

linux输出两个pattern之间的内容

作者: caokai001 | 来源:发表于2019-10-11 23:13 被阅读0次

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

  • 1. text.txt 内容如下:
(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
  • 2.使用awk 匹配PAT1 PAT2 之间的行
(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
...
  • 测试1 :说明awk '/变量/,/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 ~]$ 
  • 测试2 : 使用xargs 来帮忙
(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 '/{}/'来实现。

相关文章

网友评论

      本文标题:linux输出两个pattern之间的内容

      本文链接:https://www.haomeiwen.com/subject/qqhfmctx.html