【发布时间】:2017-04-30 22:01:01
【问题描述】:
我在 bash 脚本中有一个方法可以做这样的事情
status=$(docker service ls|grep $1|cut -f7 -d' '| grep -w "1/1")
值$1=abc_mongodb1 或$1=abc_mongodb2 等等。它告诉我字符串 1/1 是否存在,这意味着我的服务已启动。当docker service ls 的输出具有不同数量的空格时,就会出现问题,因为服务名称的长度不同。如何告诉管道切割部分的分隔符使用一个或多个空格。以下类型的输出是可能的
Output of type1
`ID NAME MODE REPLICAS IMAGE
fw2qdrh38oeq abc_mongodb2 replicated 1/1 mongo:3.4
l9mvn0wvqaxy abc_mongodb1 replicated 1/1 mongo:3.4
pfjlpa29yb59 abc_mongodb3 replicated 1/1 mongo:3.4`
我的 cut 命令在上面运行良好。在以下情况下失败
Output of type 2(failure case)
ID NAME MODE REPLICAS IMAGE
45uhn1au50ue abc_deltaservice replicated 1/1 abc-deltaservice:latest
cubbmpw657ib abc_mongodb1 replicated 1/1 mongo:3.4
gil4c53jrvyc abc_mongodb2 replicated 1/1 mongo:3.4
hy9ooec4rapd abc_executionengine replicated 1/1 abc-executionengine:latest
vocsigy76ab0 msc_mongodb3 replicated 1/1 mongo:3.4
ze4jg0f2y0jt abc_kongdb replicated 1/1 postgres:9.4
【问题讨论】:
-
使用
awk而不是cut。