リンクのhttpソースからリンク部分のみを取得する方法は?
私は持っています
<a href="http://unix.stackexchange.com/users/20661/">Unix & Linux
そしてただ手に入れたい
http://unix.stackexchange.com/users/20661/
頑張った
sed 's/^.*(http.*)".*$/\1/g'
ただし、これを行うとエラーが発生します。
sed: -e expression #1, char 22: invalid reference \1 on `s' command's RHS
答え1
この試み:
sed -r 's/.*(http[^"]*)".*/\1/g'
Mac OSXでは、次のことを試してください。
sed -E 's/.*(http[^"]*)".*/\1/g'
ノート
sed
このコマンドに注意すべきいくつかの点があります。
sed 's/^.*(http.*)".*$/\1/g'
これは
^
不要です。 sedの正規表現は常に次のようになります。貪欲。つまり.*
、正規表現が match で始まる場合は常に行の先頭から一致します。グループ化文字にするには、
(
エスケープするか、フラグを使用して拡張正規表現をオンにすることができます-r
(-E
OSXの場合)。このフラグは通常、必要なエスケープ回数を大幅に減らします。また、正規表現は欲張りなので、
(http.*)"
行の最初の二重引用符ではなく、最後の二重引用符と一致します。ただし、URLは最初の二重引用符で終わります。対照的に、use(http[^"]*)"
とmatchは決して最初のもの以上には進みません"
。USDログイン
.*$
も重複します。また、正規表現は欲張りなので、正規表現をmatchで終わると.*
行末まで一致します。
答え2
脱出口がありません。
sed 's/^.*\(http.*\)".*$/\1/g'
()
(誰が期待していたのか、誰が期待していないのか覚えていません\(\)
。)
答え3
使用awk
:
echo '<a href="http://unix.stackexchange.com/users/20661/">Unix & Linux' \
| awk -F\" '{print $2}'
http://unix.stackexchange.com/users/20661/