SED - 하나 이상의 일치 항목이 발견되면 새 행 생성

SED - 하나 이상의 일치 항목이 발견되면 새 행 생성

내 폴더에 파일이 몇개 있어요

각 파일의 구조는 다음과 같습니다.

...
infos: '{"NAME":"Product","CLASSES":[255,107,255,108,255,255,0,0,255,255,255,255,255],"ISSALE":0,"CATEG":54}'
warehouse: 123
color: black
...

다음 시나리오를 완료해야 합니다.단일 SED 명령 사용, *.txt를 사용하는 모든 파일에서

두 가지 중 하나가 발생하는 경우에만 새 행을 생성하면 됩니다. 2개의 조건이 일치하면 하나의 행만 생성되어야 합니다.

상황:

정보: {...xxxx...."CATEG":54} 또는 저장소: 123

추신: 줄 번호로 인해 파일이 변경될 수 있으므로 줄 번호가 없습니다. PS2: "CLASSES"가 아래와 같이 파일당 크기를 변경할 수 있으므로 {} 내부에 CATEG가 어디에 있는지 모르겠습니다.

카테고리 일치 - 1줄 생성됨

...
infos: '{"NAME":"Product","CLASSES":[255,107,255,108,255,255,0,0,255,255,255,255,255],"ISSALE":0,"CATEG":54}'
warehouse: 000
NEW LINE
color: black
...

저장소 일치 - 행 1개 생성

...
infos: '{"NAME":"Product","CLASSES":[255,107,255,108,255,255,0,0,255,255,255,255,255],"ISSALE":0,"CATEG":00}'
warehouse: 123
NEW LINE
color: black
...

CATEG와 저장소 일치 - 행 1개 생성

...
infos: '{"NAME":"Product","CLASSES":[255,107,255,108,255,255,0,0,255,255,255,255,255],"ISSALE":0,"CATEG":54}'
warehouse: 123
NEW LINE
color: black
...

일치하지 않음 - 생성된 행이 없습니다.

...
infos: '{"NAME":"Product","CLASSES":[255,107,255,108,255,255,0,0,255,255,255,255,255],"ISSALE":0,"CATEG":00}'
warehouse: 000
color: black
...

답변1

나는 그것이 sed데이터의 구조를 이해하지 못한다는 것을 알고 있다고 확신합니다 json. 알고 있는 것은 개행 문자, 문자열 및 정규식을 선택 및/또는 수정하는 것뿐입니다.

따라서 실수하기 쉽고 더 나쁜 것은 sed가 훨씬 나중에 다운스트림될 때까지 기꺼이 변경을 수행하기 때문에 이를 알지 못할 수도 있다는 것입니다.

주의 사항 외에도 다음 방법을 시도하여 이 문제를 해결할 수 있습니다.POSIX라이 sed:

sed -e '

  $!N

  /^infos:.*\nwarehouse:/! {
    P
    D
  }

  /"CATEG":[1-9]/! {
    /\nwarehouse: *[1-9]/! b
  }

  G

' file

또한 GNU sed설치한 경우(대개 이름이 gsed) |OR 연산자를 사용하여 최적화할 수 있습니다.

sed -E '$!N
  /^infos:|\nwarehouse:/!{P;D;}
  /("CATEG":|^warehouse:\s*)[1-9]/MG
' file

가정:

  • 정보라인과 창고라인이 인접해 있습니다.
  • CATEG 키는 infos 키 행에 있습니다.

관련 정보