내 입력은 다음과 같습니다.
["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
질문이 관련된 것일지라도 awk
pure(특히 grep) 또는 다음을 사용하여 동일한 목표를 달성하는 것이 훨씬 쉽다는 점에 유의하십시오.grep
sed
grep -o '\?[^=]*='
또는
sed -n 's/.*\(\?[^=]*=\).*/\1/p'
답변2
다음 명령을 사용하여 테스트하면 훌륭하게 작동합니다.
awk -F "=" '{print $1}' filename |awk -F "?" '{print "?"$2}'| sed '/^\?$/d'
산출
?source=
?trackId=
?tctx=