jq gsub에서 일치하는 그룹을 참조하는 방법은 무엇입니까?

jq gsub에서 일치하는 그룹을 참조하는 방법은 무엇입니까?

을 사용하여 jq정규식 및 랩으로 패턴을 검색하고 싶습니다.일치<div>다음과 같은 레이블이 있는 문자열

$ echo "\"This is a valid json file"\" | jq '. | gsub("valid";"how_to_refer_to_matches";"i") -

두 번째 매개변수에서 일치 결과를 어떻게 참조할 수 있나요 gsub?
일치하는 항목이 1개 이상인 경우 어떻게 되나요?

답변1

$ jq -n '"some string" | gsub("(?<a>[[:lower:]]+)"; "<div>\(.a)</div>")'
"<div>some</div> <div>string</div>"

또는

$ jq -n '"some string" | gsub("(?<a>[[:lower:]]+)"; "<div>" + .a + "</div>")'
"<div>some</div> <div>string</div>"

이렇게 하면 각 소문자 세트가 <div>및 옆에 있는 동일한 문자로 대체됩니다 </div>. 캡처는 교체할 때 참조하는 데 사용할 수 있는 키 이름 (단일 문자일 필요는 없음)과 일부 표현식이 어디에 있는지에 (?<a>RE)따라 수행됩니다 . 서로 다른 키 이름을 가진 여러 그룹을 동시에 캡처할 수 있습니다.a.aRE

gsub()이는 예를 들어 Perl에서와 마찬가지로 작동하므로 gsub()표현식 awk과 겹치지 않는 각 일치 항목에 대해 대체를 수행합니다. 이는 문자열의 패턴에 대해 두 개의 일치 항목이 있는 위의 예에 설명되어 있습니다.s///gseded


귀하와 더 유사한 예를 사용하려면 다음을 수행하십시오.

$ jq -n '"this is a valid JSON string" | gsub("(?<match>valid)"; "<div>" + .match + "</div>")'
"this is a <div>valid</div> JSON string"

관련 정보