줄에서 문자열을 검색하고 관련 줄을 추가합니다.

줄에서 문자열을 검색하고 관련 줄을 추가합니다.

IDDS일부 (식별자) 및 (설명) 줄이 포함된 파일이 있습니다 . 이 값이 있는 행 과 string다음 행을 유지하고 싶습니다 .IDDSID

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

관련 정보