을 사용하여 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
.a
RE
gsub()
이는 예를 들어 Perl에서와 마찬가지로 작동하므로 gsub()
표현식 awk
과 겹치지 않는 각 일치 항목에 대해 대체를 수행합니다. 이는 문자열의 패턴에 대해 두 개의 일치 항목이 있는 위의 예에 설명되어 있습니다.s///g
sed
ed
귀하와 더 유사한 예를 사용하려면 다음을 수행하십시오.
$ jq -n '"this is a valid JSON string" | gsub("(?<match>valid)"; "<div>" + .match + "</div>")'
"this is a <div>valid</div> JSON string"