다음 명령의 일부가 혼동됩니다.
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 None
a 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개의 필드가 있는 행을 인쇄하지만, 귀하의 경우 하위 기능이 기본값을 재정의하므로 다른 조치가 수행되지 않습니다. 이것이 명시적 인쇄가 필요한 이유입니다(명시적 인쇄를 제거하면 아무것도 출력되지 않습니다).