awk:在匹配到文件末尾后打印行

awk:在匹配到文件末尾后打印行

我正在尝试解析如下使用消息:

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}'

相关内容