次の使用法メッセージを解析しようとしています。
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 }'
これが機能している間に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}'