파일에서 문자열이 발견될 때마다 처음 1줄과 마지막 10줄을 삭제하고 싶습니다.
foo.txt
:
} Name: john Line 3 Line 4 Line 5 Line 6 Line 7 Line 8 Line 9 Line 10 Line 11 Line 12 Apple orange grape pine } Name: Ruben Line Line Line Line Line Line Line Line Line Line grape zebra donkey } Name: Tom Line Line Line Line Line Line Line Line Line Line Tiger red blue orange tomato cat }
예상하다 Out.txt
:
Name: john Apple orange grape pine Name: Ruben grape zebra donkey Name: Tom Tiger red blue orange tomato cat
sed
또는 중괄호와 Name: nawk
뒤의 다음 10줄을 없애고 싶습니다 . Solaris 5.10과 ksh
.
답변1
awk를 사용하세요
$ awk '/}/{next;} /Name:/{print;n=NR+10} NR>n' file
Name: john
Apple
orange
grape
pine
Name: Ruben
grape
zebra
donkey
Name: Tom
Tiger
red
blue
orange
tomato
cat
어떻게 작동하나요?
/}/{next;}
포함을 건너뜁니다
}
./Name:/{print;n=NR+10}
포함하는 줄에 도달하면 인쇄한 다음 10에 현재 줄 번호를 더해 설정하여
Name:
언제 다시 인쇄를 시작할지 알 수 있습니다.n
NR>n
현재 줄 번호가 보다 크면
n
기본 작업이 수행됩니다: 줄을 인쇄합니다.
sed 사용
매우 유사한 논리를 사용합니다.
$ sed -e '/}/d' -e '/Name:/{p;N;N;N;N;N;N;N;N;N;N;d;}' file
Name: john
Apple
orange
grape
pine
Name: Ruben
grape
zebra
donkey
Name: Tom
Tiger
red
blue
orange
tomato
cat
어떻게 작동하나요?
/}/d
포함된 내용을 모두 제거하세요
}
./Name:/{p;N;N;N;N;N;N;N;N;N;N;d;}
포함된 줄을 찾으면
Name:
인쇄한 후 다음 10줄을 읽고 삭제합니다.
위의 카테고리 중 어느 것에도 속하지 않는 라인을 인쇄합니다.