(私が知っている限り)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は正しく抽出されます。
助けてくださった皆さん、本当にありがとうございました!