![정규식 및 sed를 사용하여 파일에서 텍스트 제거](https://linux55.com/image/196109/%EC%A0%95%EA%B7%9C%EC%8B%9D%20%EB%B0%8F%20sed%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%ED%8C%8C%EC%9D%BC%EC%97%90%EC%84%9C%20%ED%85%8D%EC%8A%A4%ED%8A%B8%20%EC%A0%9C%EA%B1%B0.png)
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_type
value
value
None
jq 'del( .. |
select(
type == "object" and
has("trait_type") and has("value") and
.value == "None"
) )' file
위 명령은 작업 결과를 표준 출력에 기록합니다. 저장하려면 출력을 새 파일로 리디렉션하세요.