sed는 패턴과 일치하고 x 줄 이후에 실행됩니다.

sed는 패턴과 일치하고 x 줄 이후에 실행됩니다.

구성 파일에서 블록(여러 줄)을 주석 처리하는 방법을 찾으려고 합니다. 첫 번째 행과 일치시키고 그 이후의 모든 행에서도 작업을 수행하고 싶습니다.

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/^/#/

    이는 범위 내의 행에서만 작동하고 주석 처리합니다.

관련 정보