나는 문자열과 파일을 받았습니다. 처음 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