ファイルの2つの文字列の間でURLを抽出します。

ファイルの2つの文字列の間でURLを抽出します。

各行には次のファイルがあります。

"372"^""^"2015-09-03 06:59:44.475"^"NEW"^"N/A"^""^0^"105592"^"https://example-url.com"^"example-domain < MEN'S ULTRA < UltraSeriesViewAll (18)"^"New"^"MERCHANT_PROVIDED"

ファイルからURLを抽出したいです。https://example-url.com

sedコマンドを使用してこれらの正規表現を試しました。sed -n '/"^"http/,/"^"/p'

しかし、これは私の問題を解決しませんでした。

答え1

あなたはこれを使うことができます

sed -n 's!^.*\^"\(http[^^]*\)"^.*!\1!p'

RE初心者にとって潜在的な問題は、これが^指標であることです。行の始まり\^したがって、REの先頭に上向き矢印が必要な場合はエスケープする必要があります。

REパターンマッチングは次のように説明できます。

  • ^.*\^"- 行の先頭からパターン^"の残りの部分を満たす最後の上矢印二重引用符が表示されるまで一致します。
  • \(- 次に、交換可能な交換ブロックを起動します。\1
  • http[^^]*--httpできるだけ多くの文字を一致させなさい。^これ以上一致しないほど良いです。
  • \)--代替ブロックの終わり "^.*-- 二重引用符と上向き矢印を一致させ、"^できるだけマッチします (行末まで)。

完全一致は\1パターンブロックの先頭に置き換えられます。http

答え2

grepバージョンがPCREモードをサポートしている場合は、試してみてください。

grep -Po '(?<="\^")http.+?(?="\^")'

答え3

この試み:

echo "372"^""^"2015-09-03 06:59:44.475"^"NEW"^"N/A"^""^0^"105592"^"https://example-url.com"^"example-domain < MEN'S ULTRA < UltraSeriesViewAll (18)"^"New"^"MERCHANT_PROVIDED" | cut -f9 -d^

答え4

URLが常に引用符で始まり終わる場合は、その文字列と次の引用符の前のすべての内容をhttp簡単に検索できます。http

  1. grep

    $ grep -o 'https*://[^"]*' file
    https://example-url.com
    
  2. sed

    $ sed -n 's#.*\(https*://[^"]*\).*#\1#;p' file
    https://example-url.com
    
  3. パール

    $ perl -ne 's#.*(https*://[^"]*).*#\1# && print' file
    https://example-url.com
    
  4. awkわずかに異なるアプローチを使用することもできます。-Fフィールド区切り記号の設定を使用し"て、次から始まるフィールドを印刷しますhhtp

    $ awk -F\" '{for(i=1;i<NF;i++){if($i~/^http/){print $i}}}' file
    https://example-url.com
    

関連情報