Sed: 처음 n 줄 사이에 주어진 문자열을 포함하는 줄을 삭제합니다.

Sed: 처음 n 줄 사이에 주어진 문자열을 포함하는 줄을 삭제합니다.

나는 문자열과 파일을 받았습니다. 처음 30개 행 사이에 지정된 문자열이 있는 행을 삭제해야 합니다. 다음과 같은 것을 시도했습니다.sed -i '/pattern/1,30d' filename 하지만 오류가 발생합니다. 더 구체적으로, 내가 원하는 것은 sed가 처음 30줄만 분석하고 주어진 패턴이 발견되면 해당 줄을 삭제하는 것입니다.

답변1

적어도 GNU sed를 사용하면 가능할 것 같습니다.

sed '1,30{/pattern/d}' file

축소된 테스트: 다음 file과 같이 제공됩니다.

some line
pattern
other line
some line
pattern
other line

그 다음에

$ sed '1,3{/pattern/d}' file
some line
other line
some line
pattern
other line

답변2

sed다음과 함께 head사용할 수 있습니다 tail.

( head -n30 file | sed '/pattern/d' ; tail -n+31 file ) > newfile

또는 Perl을 사용하여:

perl -i~ -ne 'print if $. > 30 or not /pattern/' file

관련 정보