이 awk 명령은 여러 줄에서 어떻게 작동합니까?

이 awk 명령은 여러 줄에서 어떻게 작동합니까?

다음 명령의 일부가 혼동됩니다.

awk '/<Directory \/>/,/AllowOverride None/{sub("None", "All", $0)}{print}' /etc/apache2/apache2.conf > myfile.txt

이 명령은

<Directory />
    AllowOverride None
</Directory>

그리고

<Directory />
    AllowOverride All
</Directory>

Apache 구성에서 업데이트된 구성을 작성합니다 myfile.txt.

이 명령이 어떻게 파일의 두 줄에서 패턴 일치를 수행할 수 있는지 이해할 수 없습니다. 국경을 넘는 작업의 예를 찾을 수 없습니다. 의 쉼표와 관련이 있는 것 같지만 /<Directory /\>,/AllowOverride정확히 무슨 일이 일어나고 있는지 이해하고 싶습니다. 이 패턴 일치는 파일의 두 줄에서 어떻게 수행됩니까?

또한 왜 필요한가 {print}? 기본적으로 결과가 인쇄되지 않습니까 awk?

답변1

  • /<Directory \/>/,/AllowOverride None/(이 줄 사이에 )
  • sub( ... )None대체 할 것이다All
  • {print}모든 라인에는 (교체 여부)가 필요합니다.

with 줄은 AllowOverride Nonea sub및 a 를 얻고 print다른 모든 줄은 인쇄됩니다.

샘플 파일:

<Directory />
   ## we don't want None
    AllowOverride None
   ## all or None-thing
</Directory>

될 것입니다

<Directory />
   ## we don't want All
    AllowOverride All
   ## all or None-thing
</Directory>

기본값과 관련하여 다음을 고려하십시오.

... | awk 'NF==7' 

기본적으로 7개의 필드가 있는 행을 인쇄하지만, 귀하의 경우 하위 기능이 기본값을 재정의하므로 다른 조치가 수행되지 않습니다. 이것이 명시적 인쇄가 필요한 이유입니다(명시적 인쇄를 제거하면 아무것도 출력되지 않습니다).

관련 정보