다음을 포함하는 파일이 있습니다.
[...]
location /static {
...
multiple lines
...
}
[...]
location /static/ {
...
multiple lines
...
}
[...]
그리고 나는 얻고 싶다 :
[...]
# location /static {
# ...
# multiple lines
# ...
# }
[...]
# location /static/ {
# ...
# multiple lines
# ...
# }
[...]
유닉스 명령에 내 파일을 제공하는 방법은 무엇입니까?
이것은 사소한 것이 아닙니다. 각 {}
블록에 다른 중첩 {}
블록이 포함되어 있지 않다고 가정 할 수 있다면 더 쉽고 다음과 같이 할 수 있습니다.
perl -pe 'if(/location\s*\/static/){$n=1}elsif(/}/){$n=0} s/^/#/ if $n==1;' file
이것은 단순히 설정 $n
에 1
경우 현재 행 일치 location /static
와 세트 그 뒤로 0
처음에 }
후 발견 location/static
. 그런만큼 $n==1
, 그것은을 addas #
줄의 시작 부분에. 이 -p
플래그는 perl이 입력 파일을 자동으로 반복하고 각 행을 인쇄하도록합니다.
이제 주석을 달고 자하는 블록 내에 임의의 깊이 중첩 블록을 가질 수 있다면 상황이 더 복잡해집니다. 예를 들어, 다음과 같은 경우 :
location /static {
if(foo){
print "one";
}
elsif(bar){
print "two";
}
}
이와 같은 경우 위의 간단한 솔루션이 실패하고 open 수를 추적하는 솔루션을 사용해야합니다 {
. 예를 들어 (실제로는 한 줄짜리이며 터미널에 직접 복사 / 붙여 넣기 할 수 있습니다. 명확성을 위해 확장했습니다.)
perl -pe 'if(/location\s*\/static/){$n=1;}
elsif(/}/ && $open==0){$n=0}
if($n==1 && /{/){$open++} ## count open brackets
elsif($n==1 && /}/){$open--} ## count closing brackets
if($n==1 && $open>0){ s/^/#/}; ' file
마지막으로 솔루션이 예상대로 작동하면 -i
플래그를 추가 하여 파일 자체를 변경할 수 있습니다.
perl -i -pe 'if(/location\s*\/static/){$n=1}elsif(/}/){$n=0} s/^/#/ if $n==1;' file
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다