在yml
的{{1}}个文件中,卷在以Docker Compose
行开头的部分中声明,后跟volumes:
等模式。 sections以下一部分的开头结束,其名称不会始终相同,可以是- host/dir:guest:dir
,ports:
和environment:
中的任何一个,以及其他部分。通常有多个networks:
部分,并且每个部分中的行数未知(并且在volumes:
部分中不是恒定的)。
我需要从volumes:
文件的所有- host/dir:guest:dir
部分提取所有卷声明(即volumes:
)。
谢谢!
示例yml
文件:
yml
答案 0 :(得分:1)
awk 单线
假设您在每个卷声明中都有/
输入:
version: '2'
services:
service1:
image: repo1/image1
volumes:
- /dir1/dir2:/dir3/dir4
- /dir5/dir6:/dir7/dir8
ports:
- "80:80"
service2:
image: repo2/image2
volumes:
- /dir9/dir10:/dir11/dir12
environment:
- A: B
volumes:
- /dir1/dir2:/dir3/dir4
- /dir5/dir6:/dir7/dir8
meow:
<强>输出强>:
$awk '$0!~"/"{a=0} /volumes:/{a=1; next}a' file
- /dir1/dir2:/dir3/dir4
- /dir5/dir6:/dir7/dir8
- /dir9/dir10:/dir11/dir12
- /dir1/dir2:/dir3/dir4
- /dir5/dir6:/dir7/dir8
$0!~"/"{a=0}
:如果记录/行不包含/
,则表示它不是卷声明;设置a=0
/volumes:/{a=1; next}
:如果该行包含volumes:
,则设置a=1
和next
,即跳转到下一条记录
a
:打印a=1
PS:如果你的yml文件中包含/
的标签可以在卷之后,那么这可能会失败。如果是这种情况,那么使用这个awk:
$awk '$1!~"-"{a=0} /volumes:/{a=1; next}a' file
如果第一个字段不是a
-
答案 1 :(得分:1)
awk '$1=="-"{if (f) print; next} {f=/^[[:space:]]*volumes:/}' file