awk를 사용하여 일치하는 모든 문자열을 인쇄하는 방법은 무엇입니까?

awk를 사용하여 일치하는 모든 문자열을 인쇄하는 방법은 무엇입니까?

내 입력은 다음과 같습니다.

["https://www.tesing.com/watch/80239279"],
["https://www.testing.com/watch/80240715?source=35"],
["https://www.testing.com/watch/80242619?trackId=254015180&tctx=0%2C0%2Ce336905e-6b5c-4a93-ad18-57ae35b6eb08-583558810%2C29fea9da-2bf8-43b0-b26a-2da637154825_96118138X20XX1560732016031%2C29fea9da-2bf8-43b0-b26a-2da637154825_ROOT"],
["https://www.testing.com/watch/80242619?tctx=1%252C0%252C%252C%252C"],

그래서 나는 단지 추출물을 원한다매개변수(예: trackId, SourceId)

내 거정규식/[\?\\&]{1,2}\w+=/.

파일.awk

BEGIN {}
{
    match($0, /[\?\\&]{1,2}\w+=/){print substr($0, RSTART, RLENGTH)}
}
END {}

하지만 일치하는 문자열만 인쇄합니다.

답변1

질문이 관련된 것일지라도 awkpure(특히 grep) 또는 다음을 사용하여 동일한 목표를 달성하는 것이 훨씬 쉽다는 점에 유의하십시오.grepsed

grep -o '\?[^=]*='

또는

sed -n 's/.*\(\?[^=]*=\).*/\1/p'

답변2

다음 명령을 사용하여 테스트하면 훌륭하게 작동합니다.

awk -F "=" '{print $1}' filename |awk -F "?" '{print "?"$2}'| sed '/^\?$/d'

산출

?source=
?trackId=
?tctx=

관련 정보