내 폴더에 파일이 몇개 있어요
각 파일의 구조는 다음과 같습니다.
...
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 키 행에 있습니다.