加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

regex-如何检查docker实例是否在Bash中运行

发布时间:2020-12-16 03:25:17 所属栏目:安全 来源:网络整理
导读:具有docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES56489a32cb8c 83132b61eccf "bash" 41 hours ago Exited (0) 41 hours ago naughty_jang4b4933b40175 83119b65eccf "bash" 41 hours ago Exited (0) 41 hours ago suspicious_mcnult

具有docker ps -a

CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS                    PORTS                    NAMES

56489a32cb8c        83132b61eccf                  "bash"                   41 hours ago        Exited (0) 41 hours ago                            naughty_jang
4b4933b40175        83119b65eccf                  "bash"                   41 hours ago        Exited (0) 41 hours ago                            suspicious_mcnulty
3149e612f9f8        83119b6143cf                  "sh"                     43 hours ago        Exited (0) 41 hours ago                            thirsty_mestorf

我想匹配状态和名称列以检查哪个是实例状态,因此从列索引1开始的第5列和第7列.

假设我使用制表符分隔值

docker ps -a | awk -FS $'t' '{print $5,$7}'

要么

docker ps -a | awk 'BEGIN {FS="t"}; {print $5,$7}'

但这不起作用,同时将默认的空白字符保留为FS

docker ps -a | awk 'BEGIN {FS=" "}; {print $5,$7}'

所以我试图像这样一次匹配一列

awk -F$" " -v COLT=$1 '
        NR==1 {
                for (i=1; i<=NF; i++) {
                        if ($i==COLT) {
                                title=i;
                        }
                }
        }
        NR>1 {
                if (i=title) {
                        print $i
                }
        }
'

应该在您执行的脚本中包含此内容

docker ps -a | ./status.sh NAMES

但由于匹配的制表符空格错误,因此无法使用.
这里的问题是docker ps -a的输出有空格,而不是制表符,因此空格数量可变,因此我应该使用特定的正则表达式作为FS字段分隔符,如here所述,但我不知道如何操作.

最佳答案
一个简单的docker ps –format“ {{.ID}} {{.Command}} {{.Status}}”将更易于解析,因为它只有三列.

使用formatting,您只能显示所需的基本信息,并在每列之间使用所需的分隔符.

OP loretoparisi建议in the comments:

docker ps -a --format "{{.ID}}t"{{.Status}}"t{{.Names}}" | cut -f2 -d$'t' 

to get col 2,or you could do:

docker ps -a --format "{{.ID}}t"{{.Status}}"t{{.Names}}" | awk -F$"t" '{printf "%s|%s|%sn",$1,$2,$3}' 

to rule them all!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读