目的:需要匹配
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 '/{}/'
来实现。
网友评论