pcregrep 中的 -oX 选项有问题。指定多个具有不同数字的此类选项仅输出最后指定的捕获组。
数据:
docker ps | awk '{print $1}' | tail -n +2 | xargs docker inspect
输出:
[{
"ID": "4e7f430263c33c25970134760ea96f9b57452680a8cfdf062270f5f7fe385135",
.... #lots of additional lines
"Ports": {
"5000/tcp": [
{
"HostIp": "127.0.0.1",
"HostPort": "5000"
}
],
"5984/tcp": [
{
"HostIp": "127.0.0.1",
"HostPort": "5984"
}
]
}
},{
#same as above, but with a different ID and HostPort 5000
}]
理念
docker ps | awk '{print $1}' | tail -n +2 | xargs docker inspect | pcregrep -M -o1 'ID":\s"(\w*)(?:\n|.)*?HostPort":\s"(\w)'
输出
4e7f430263c33c25970134760ea96f9b57452680a8cfdf062270f5f7fe385135
db35ce4b1fc7580ff43bacda5e961c4741c9447e97dbbdbf38218d068b0132af
和
docker ps | awk '{print $1}' | tail -n +2 | xargs docker inspect | pcregrep -M -o2 'ID":\s"(\w*)(?:\n|.)*?HostPort":\s"(\w*)'
输出
8000
5000
到目前为止,一切都很好。现在我想将这些输出组合在同一行。pcregrep -M -o
但是也输出介于两者之间的所有内容(似乎忽略了中间组未捕获)并且pcregrep -M -o1 -o2
仅输出第二组 - 第二个选项似乎覆盖了第一个。这是在 Ubuntu 12.04 LTS 上。
任何想法如何获得输出
4e7f430263c33c25970134760ea96f9b57452680a8cfdf062270f5f7fe385135 8000
db35ce4b1fc7580ff43bacda5e961c4741c9447e97dbbdbf38218d068b0132af 5000
并且仍然保持“unixy”(最好没有 perl/python/ruby 脚本)?
背景:我想自动停止 docker 中占用特定端口的容器。