문자열을 검색하고 두 패턴 사이의 모든 줄을 꺼내고 싶습니다. [중복]

문자열을 검색하고 두 패턴 사이의 모든 줄을 꺼내고 싶습니다. [중복]

문자열을 검색하여 두 패턴(패턴 포함) 사이의 모든 줄을 추출하고 싶습니다.

#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}' 파일

관련 정보