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

관련 정보