web-dev-qa-db-ja.com

ファイル内の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'

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

3
Anurag Sharma

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

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

REの初心者にとっての潜在的な問題は、^行の先頭のインジケータであることです。そのため、リテラルの上矢印が必要な場合は、必ず\^をエスケープする必要があります。 REの開始時。

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

  • ^.*\^"-行の先頭から、残りのパターンを満たす上向きの二重矢印二重引用符^"が見つかるまで照合します
  • \(-\1として置換できる置換ブロックを開始します
  • http[^^]*-httpに一致し、その後に^でない文字をできるだけ多く続けます
  • \)-置換ブロックを終了します"^.*-二重引用符と上矢印"^に一致し、可能な限り(行末まで)一致します

この完全一致は、httpで始まるパターンブロックである\1に置き換えられます。

4
roaima

これを試して:

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^
3
SHW

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

  1. グレップ

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

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

    $ 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
    
0
terdon