정규식 및 sed를 사용하여 파일에서 텍스트 제거

정규식 및 sed를 사용하여 파일에서 텍스트 제거

sed를 사용하여 json 파일에서 일부 줄을 삭제하려고 합니다. 아시다시피 저는 매우 아마추어이지만 정규식은 정확하다고 생각합니다. 그러나 sed는 종료되지 않은 주소 및 종료되지 않은 's' 명령을 포함하여 다양한 오류를 발생시킵니다.

삭제하려는 텍스트는 다음과 같습니다.

    {
  "trait_type": "Accessories",
  "value": "None"
}

이 정규 표현식을 제거해야 합니다. (trait_type은 파일마다 다르기 때문에 "none" 값을 기준으로 전체 블록을 제거해야 합니다)

(\{)([\r\n].+)(\r|\n|)(.*(?:None).*)([\r\n].*)

온라인 정규식 테스터를 사용하면 위의 내용이 제대로 작동하는 것 같습니다.

내가 사용하는 명령(및 일부 변형)은 다음과 같습니다.

sed -e 's/\{([\r\n].+)(\r|\n|)(.*(?:None).*)([\r\n].*)//g' 2.json

누구든지 도와줄 수 있나요?

매우 감사합니다

답변1

이것이 JSON 파일의 일부라고 가정하면 다음 명령은 키와 키가 있는 모든 개체를 찾고 jq키 값이 있는 모든 개체를 삭제합니다.trait_typevaluevalueNone

jq 'del( .. |
    select(
      type == "object" and
      has("trait_type") and has("value") and 
      .value == "None"
    ) )' file

위 명령은 작업 결과를 표준 출력에 기록합니다. 저장하려면 출력을 새 파일로 리디렉션하세요.

관련 정보