特定のパターンを除くすべてのパターンを削除するには、sed を使用します。

特定のパターンを除くすべてのパターンを削除するには、sed を使用します。

リンクのhttpソースからリンク部分のみを取得する方法は?

私は持っています

<a href="http://unix.stackexchange.com/users/20661/">Unix &amp; 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'
  1. これは^不要です。 sedの正規表現は常に次のようになります。貪欲。つまり.*、正規表現が match で始まる場合は常に行の先頭から一致します。

  2. グループ化文字にするには、(エスケープするか、フラグを使用して拡張正規表現をオンにすることができます-r-EOSXの場合)。このフラグは通常、必要なエスケープ回数を大幅に減らします。

  3. また、正規表現は欲張りなので、(http.*)"行の最初の二重引用符ではなく、最後の二重引用符と一致します。ただし、URLは最初の二重引用符で終わります。対照的に、use(http[^"]*)"とmatchは決して最初のもの以上には進みません"

  4. USDログイン.*$も重複します。また、正規表現は欲張りなので、正規表現をmatchで終わると.*行末まで一致します。

おすすめ記事