我正在尝试解析如下使用消息:
Usage:
docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...]
docker-compose -h|--help
...
Commands:
build Build or rebuild services
bundle Generate a Docker bundle from the Compose file
...
仅获取Command
名称。因此,我希望跳过该Commands:
行之前的所有行(包括该行),然后打印以下所有行上的第一个单词,即
build
bundle
...
目前我正在做
docker-compose --help | sed -e '1,/Commands:/d' | awk '{ print $1 }'
虽然这有效,但我怀疑我可以用一个awk
.到目前为止我最接近的是:
docker-compose --help | awk '/Commands:/,0 { print $1 }'
但这包括匹配的Commands:
行。能做到吗?
答案1
如果您标记了栅栏的存在,那么您可以使用它来决定打印下一行以及之后的内容,例如:
awk 'x==1 {print $1} /Commands:/ {x=1}'
答案2
请注意,很1,/Commands:/d
容易翻译成awk
:
awk 'NR==1, $1 == "Commands:" {next}; NF {print $1}'
不同之处在于,如果位于第一行,sed
它也可以工作。Command:
可以NF {print $1}
翻译为sed
:
sed -n '1,/^Commands:/!s/^[[:blank:]]*\([^[:blank:]]\{1,\}\).*/\1/p'
答案3
sed -n '/Commands:/,$p' filename | awk 'NR!=1{print $1}'