各行には次のファイルがあります。
"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
grep
$ grep -o 'https*://[^"]*' file https://example-url.com
sed
$ sed -n 's#.*\(https*://[^"]*\).*#\1#;p' file https://example-url.com
パール
$ 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