sed: 패턴 사이의 여러 범위, 한 번에 전달됨

sed: 패턴 사이의 여러 범위, 한 번에 전달됨

약 3GB의 파일을 읽고 파이프를 통해 전송하는 스크립트가 있는데, 이는 파일의 작은 부분에서 거의 대체되지 않습니다. 최소한의 오버헤드로 이 작업을 수행하기 위해 스크립트는 대체가 이루어지는 작은 알려진 범위를 지정합니다 sed '/begin/,/end/'.

동일한 파일의 다른 작은 알려진 "정규식으로 구분된" 범위에 대체 항목을 몇 개 더 추가하고 싶습니다. sed를 통해 다시 파이프하면 불필요한 오버헤드가 발생하고 확장이 잘 되지 않습니다.

파일에 나타나는 순서를 알고 있는 경우 파일을 한 번만 읽으면 되도록 패턴 사이의 두 범위를 지정하는 방법이 있습니까?

'sed '/begin1/,/end1/ ... /begin2/,/end2/'제 생각은 이렇습니다.

이것sed 매뉴얼상태

쉼표(,)로 구분된 두 개의 주소를 지정하여 주소 범위를 지정할 수 있습니다.

그러나 그룹당 두 개의 주소를 지정하는 것은 언급되지 않습니다.

답변1

파일에 어떤 범위가 먼저 나타나는지 알 필요는 없습니다. 당신은 명백한 것을 작성할 수 있습니다 :

#/bin/sed -f

/begin1/,/end1/{
# commands specific to range 1
}

/begin2/,/end2/{
# commands specific to range 2
}

작동합니다.

Sed는 항상 단일 패스로 입력을 반복하여 각 줄을 읽고, 사용자가 제공한 명령으로 처리한 다음 작성합니다(경우에 따라 작성하지 않을 수도 있음). 파이프에서 sed를 실행하여 이를 증명할 수 있습니다(파이프 입력은 검색할 수 없으므로 다중 패스가 불가능합니다).

관련 정보