문자열을 검색하여 두 패턴(패턴 포함) 사이의 모든 줄을 추출하고 싶습니다.
#1 시작 이름 S 101 프랑크푸르트_1_1 19호 A+ 거리 끝 #2 시작 이름 B 104 베를린 20 A+ 거리 끝 시작 #100 이름C 107 베를린 이십 일 A+ 거리 끝 #24 시작 명명 된 110 프랑크푸르트_1_1 이십 일 A+ 끝
grep
내가 프랑크푸르트 라면
그런 다음 START와 END(START와 END 포함) 사이의 모든 줄을 표시해야 합니다. 예를 들면 다음과 같습니다.
#1 시작 이름 S 101 프랑크푸르트_1_1 19호 A+ 거리 끝 #24 시작 명명 된 110 프랑크푸르트_1_1 이십 일 A+ 거리 끝
내가 사용한 명령은 다음과 같습니다.
고양이 파일 | awk '/START/,/END/' | grep -p 프랑크푸르트
그러나 그것은 작동하지 않았습니다.
답변1
검색이 여러 줄을 기반으로 하기 때문에 awk가 해당 작업에 적합한 도구인지 확실하지 않습니다. 나는 이것이 Perl의 일이라고 생각합니다. 사용할 수 있는 파일을 찾아보려면(awk 문과 유사):
if (/^START/ .. /^END/){}
거기에서 행을 배열에 저장하고 프랑크푸르트가 충족되면 행을 인쇄합니다(여기서는 부울 사용).
push @lines, $_;
if (/Frankfurt/)
$toPrint = 1;
모든 경우에 패턴 밖으로 나갈 때 부울이 true이면 배열을 인쇄하고, 그렇지 않으면 인쇄하지 말고 배열을 지웁니다.
답변2
우리는 확실히 사용할 수 있습니다 awk
. 이것을 시도해 보세요
awk -v RS="END" '$0~/프랑크푸르트/{print $0 RS}' 파일