2017-11-14 4 views
0

을 나오지 bash는 캡처 그룹과 캡처 일치를 대체하지만, 내 정규식 다른 종료하고 특별한주의가 필요한다 같습니다 How to output only captured groups with sed Replace one capture group with another with GNU sed (macOS) 4.4 sed replace line with capture groups을 나는 큰 JSON 파일에서 정규식 일치 그룹을 대체하기 위해 노력하고있어GNU 내가 울부 짖는 나와 다른 게시물에서 내 문제에 대한 해결책을 찾기 위해 주위를 둘러 보았다 한

는 내 파일은 MongoDB의 개체를 수출하고 있으며, 나는 문자열로 OBJECTID을 대체하기 위해 노력하고있어 : 그래서

{"_id":{"$oid":"56cad2ce0481320c111d2313"},"recordId":{"$oid":"56cad2ce0481320c111d2313"}} 

{ "_id": "56cad2ce0481320c111d2313", "recordId를": "56cad2ce0481320c111d2313"}

내가 쉘에서 실행되는 명령입니다 :

sed -i 's/(?:{"\$oid":)("\w+")}/\$1/g' data.json 

I를 원본 파일의 출력은, 다음과 같이 오류는 발생하지 않지만 파일은 동일하게 유지됩니다. 내가 뭘 잘못하고 있니?

+1

가, JSON을 수정 JQ 같은 것을 사용하는 정규식을 사용하지 마십시오. – Sundeep

+0

'$ oid' 값은 무엇입니까? – RomanPerekhrest

+0

$ oid 값은 문자열이므로 mongo에서 콜렉션을 mongoexport하면 _id 키가 Object : ' "_id": { "$ oid": "56cad2ce0481320c111d2313"} ' – yudarik

답변

0

마지막으로 나는 bash에서 정규 표현식이테스터 도구와 다른 방식으로 동작하도록했습니다. 나는 그것이 더 나은 다음, 대신 JSON 파일을 처음 쓰는, 파일 읽기, 교체하고 다시 작성하는 표준 입력과 출력에서 ​​읽을 발견

"56cad2ce0481320c111d2313" 

:

echo '{"$oid":"56cad2ce0481320c111d2313"}' | sed 's/{"$oid":\("\w*"\)}/\1/g' 

정확한 출력을 제공합니다. 내가 수집을 내보내 OBJECTID를 교체하고 JSON 파일에 출력을 작성 mongoexport을 사용하기 때문에

, 내 최종 솔루션은 다음과 같습니다

mongoexport --host localhost --db myDB --collection my_collection | sed 's/{"$oid":\\("\\w*"\\)}/\\1/g' >> data.json 
+0

과 같이 내보내집니다. https : // unix.stackexchange.com/questions/119905/why-does-my-regular-expression-work-in-x-but-not-in-y – Sundeep