各行が次のようなファイルがあります
"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'
しかし、それは私の問題を解決しませんでした。
あなたはこれを使うことができます
sed -n 's!^.*\^"\(http[^^]*\)"^.*!\1!p'
REの初心者にとっての潜在的な問題は、^
が行の先頭のインジケータであることです。そのため、リテラルの上矢印が必要な場合は、必ず\^
をエスケープする必要があります。 REの開始時。
REパターンマッチは次のように説明できます。
^.*\^"
-行の先頭から、残りのパターンを満たす上向きの二重矢印二重引用符^"
が見つかるまで照合します\(
-\1
として置換できる置換ブロックを開始しますhttp[^^]*
-http
に一致し、その後に^
でない文字をできるだけ多く続けます\)
-置換ブロックを終了します"^.*
-二重引用符と上矢印"^
に一致し、可能な限り(行末まで)一致しますこの完全一致は、http
で始まるパターンブロックである\1
に置き換えられます。
これを試して:
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^
URLが常にhttp
で始まり、引用符で終わる場合は、文字列http
と次の引用符までのすべてを検索できます。
グレップ
$ grep -o 'https*://[^"]*' file
https://example-url.com
sed
$ sed -n 's#.*\(https*://[^"]*\).*#\1#;p' file
https://example-url.com
Perl
$ Perl -ne 's#.*(https*://[^"]*).*#\1# && print' file
https://example-url.com
少し異なるアプローチで、awk
も使用できます。 -F
を使用してフィールド区切り文字を"
に設定し、hhtp
で始まるすべてのフィールドを出力します。
$ awk -F\" '{for(i=1;i<NF;i++){if($i~/^http/){print $i}}}' file
https://example-url.com