다음과 같은 사용법 메시지를 구문 분석하려고 합니다.
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}'