特定のパターンからURLを抽出する(Google Notifier)

特定のパターンからURLを抽出する(Google Notifier)

(私が知っている限り)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のバリエーションを試しましたが、何も機能しません。

誰もがこの問題を解決するのに役立つことができればとても感謝します。

PS:URLが抽出されたら=文字を処理する必要があることを知っていますが、一度に1つの問題が発生します。 :)

答え1

次のコマンドラインを使用して処理できます。

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

最初のステップsedは、「=」で終わる行を後続の行に関連付けて、具体的に興味深い行の1行を作成することです。

2番目のステップでは、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は正しく抽出されます。

助けてくださった皆さん、本当にありがとうございました!

関連情報