구성 파일에서 블록(여러 줄)을 주석 처리하는 방법을 찾으려고 합니다. 첫 번째 행과 일치시키고 그 이후의 모든 행에서도 작업을 수행하고 싶습니다.
sed '/\/Some\/Foo\/Bar\/String/' config.file
다음 예제 "코드"는 제가 일치시키려고 시도하고 주석 처리한 것입니다. 블록은 항상 }로 끝나지만 패턴 일치 이후의 줄 수도 알고 있으므로 패턴 줄 + 6이 됩니다.
foo { '/Some/Foo/Bar/String' :
key1 => value1,
key2 => value2,
key3 => value3,
key4 => value4,
key5 => value5,
}
sed 명령 후 결과
#foo { '/Some/Foo/Bar/String' :
# key1 => value1,
# key2 => value2,
# key3 => value3,
# key4 => value4,
# key5 => value5,
#}
답변1
sed
행 범위를 정의한 다음 해당 범위 내에서만 대체를 적용할 수 있습니다. 포함된 행으로 시작 Some/Foo/Bar/String
하고 포함된 행으로 끝나는 범위를 정의한 }
다음 교체 명령을 적용하여 해당 행을 주석 처리할 수 있습니다.
$ sed '\|/Some/Foo/Bar/String|,/}/ s/^/#/' file
#foo { '/Some/Foo/Bar/String' :
# key1 => value1,
# key2 => value2,
# key3 => value3,
# key4 => value4,
# key5 => value5,
#}
세부 사항
\|/Some/Foo/Bar/String|, /}/
이는 범위를 정의합니다.
/\/Some\/Foo\/Bar\/String/, /}/
그러나 백슬래시를 피하기 위해 첫 번째 정규식을 구분 기호로 사용하는|
것처럼 작성할 수 있습니다 ./
s/^/#/
이는 범위 내의 행에서만 작동하고 주석 처리합니다.