ID
DS
일부 (식별자) 및 (설명) 줄이 포함된 파일이 있습니다 . 이 값이 있는 행 과 string
다음 행을 유지하고 싶습니다 .ID
DS
ID
ID number1 string
DS item11
DS item12
ID number2 not_string
DS item21
DS item22
ID number3 string
DS item31
DS item32
다음을 반환합니다:
ID number1 string
DS item11
DS item12
ID number3 string
DS item31
DS item32
답변1
not_string
제가 올바르게 이해했다면 귀하의 입력을 테스트하도록 변경하겠습니다 .
ID number1 string
DS item11
DS item12
ID number2 qwerty
DS item21
DS item22
ID number3 string
DS item31
DS item32
노력하다:
$ awk '/ID/ && !/string/{flag=0;next};/string/{flag=1};flag' file
ID number1 string
DS item11
DS item12
ID number3 string
DS item31
DS item32
답변2
sed -n '/ID.* s/p;//,/ID/{//!p;}' <<\DATA
ID number1 string
DS item11
DS item12
ID number2 not_string
DS item21
DS item22
ID number3 string
DS item31
DS item32
DATA
이것만 의지하세요POSIX 정의정규식 주소의 동작 sed
:
RE가 비어 있는 경우(즉, 모드가 지정되지 않음)
sed
마지막 명령에 사용된 마지막 RE가 적용된 것처럼 동작해야 합니다.(명령/address/
또는 주문의 일부로s/ubsti/tute/
)임명되다.
검색어 상단의 /ID.* s/
주소가 일치 하면 p
인쇄됩니다. 라인 범위는 마지막 주소 와 다음 주소와 //,/ID/
일치하는 라인 사이에 지정됩니다.ID철사. {within;}
이 범위에 속하는 모든 라인(마지막 줄로 끝나면 불완전함)!not
일치하는 항목 //
도 p
인쇄됩니다.
모든 발생은 /ID.* s/
내가 명시적으로 p
인쇄한 줄이며 모든 발생은~ 사이해당 라인과 다음 /ID/
라인 - 또는(및 포함)마지막 행 중 먼저 오는 행입니다.
산출
ID number1 string
DS item11
DS item12
ID number3 string
DS item31
DS item32