특정 패턴에서 URL 추출(Google 알리미)

특정 패턴에서 URL 추출(Google 알리미)

(내가 아는 한) grep 및 sed 명령의 가능한 모든 조합을 시도했지만 다음 패턴(일반 텍스트 Google 경고 이메일)으로 URL을 추출하지 못했습니다.

"url": "https://www.google.com/url?rct=3Dj\u0026sa=3Dt\u0026url=3Dhtt=
p://abcnews.go.com/US/wireStory/judge-orders-forfeiture-cartel-money-launde=
ring-case-44765120\u0026ct=3Dga\u0026cd=3DCAEYACoTNzAxNDE5ODc4MzMzMTc5OTA4O=
TIaYjdkMGIxMjNmMjc0YWM4ODpjb206ZW46VVM\u0026usg=3DAFQjCNHKeTb3brU2sr0qOpXXJ=
fuW9Nfntg"

분명히 내가 추출하고 싶은 것은 다음과 같습니다.

http://abcnews.go.com/US/wireStory/judge-orders-forfeiture-cartel-money-laundering-case-44765120

그래서 "url=3D"와 "\" 사이의 내용을 추출해야 합니다.

다양한 grep 및 sed 변형을 시도했지만 아무것도 작동하지 않습니다.

누구든지 이 문제를 해결하는 데 도움을 줄 수 있다면 매우 감사하겠습니다.

추신: URL이 추출되면 = 문자를 처리해야 한다는 것을 알고 있지만 한 번에 한 가지 문제가 발생합니다. :)

답변1

다음 명령줄을 사용하여 처리할 수 있습니다.

cat INBOX | sed -z -e 's/=\n//g' | \
   sed -e 's/.*u0026url=3D//;t a;d;:a' -e 's/\\u0026ct=3D.*//'

첫 번째 단계 sed는 "="로 끝나는 줄을 후속 줄과 연결하여 구체적으로 흥미로운 줄의 한 줄을 만드는 것입니다.

두 번째 단계에서는 sed먼저 헤더를 제거하고 해당 헤더가 없는 행을 삭제하여 관심 있는 행을 줄인 다음 대상 행의 꼬리 부분을 제거합니다.

답변2

이 명령을 사용해 볼 수 있나요?

awk -F"3D" '{print $4}' input.txt | sed "s/\\\u.*//"

답변3

어떻게 알림을 받는지 잘 모르겠지만 알림이 간단한 텍스트 파일에 있는 경우 어떻게 해야 하는지에 대한 예를 제공하겠습니다. 먼저 tr을 사용하여 "="를 처리한 다음 다음과 같이 grep과 함께 Pearl Lookaround를 사용합니다...

cat input.txt | tr --delete '=\n'| grep -oP '(?<=url3D).*?(?=\\u0026)' input.txt

귀하의 예제를 사용한 출력은 다음과 같습니다.

http://abcnews.go.com/US/wireStory/judge-orders-forfeiture-cartel-money-laundering-case-44765120

답변4

Ralph Rönnquist의 제안을 사용하여 문제 해결

cat INBOX | sed -z -e 's/=\r\?\n//g' | \ sed -e 's/.*u0026url=3D//;t a;d;:a' -e 's/\\u0026ct=3D.*//' > output.txt

계산하는 데 시간이 오래 걸리지만 URL은 올바르게 추출됩니다.

도움을 주신 모든 분들께 진심으로 감사드립니다!

관련 정보