ファイルからURIを抽出する方法

ファイルからURIを抽出する方法

特定の数のファイルからすべてのURIを抽出する方法はmagnet: file:?各行にURIを出力として含めたい。これを達成するためにbashを使用したいのですが、どんな提案でも歓迎します。私はDebian 7を使用しています。

入力は、任意の名前を持つHTMLファイルの束です。 URIはすべてa hrefHTMLタグになっています(例:)<a href='magnet:?xt=something1:something1:somerandomcharacters'>link text</a>。各ファイルにURIがどのように格納されるかについてのスキームはありません。Nファイルの任意の場所に配置できる各ファイルのURI。

予想される出力は、改行で区切られた値を含むリストでなければなりません。たとえば、次のようになります。

magnet:?xt.......
magnet:?xt.......
magnet:?xt.......

答え1

URIが空白で終わるようです。grep -o 'magnet://[^ ]*' filename

修正する:grep -o "magnet:?xt[^']*" filename

修正するcat * | grep -o "magnet:?xt[^']*"またはgrep -oh "magnet:?xt[^']*" *

答え2

を使用するには、GNU grep以下を試してください。

$ echo "<a href='magnet:?xt=something1:something1:somerandomcharacters'>link text</a>" | 
grep -oP "magnet.*(?=')"
magnet:?xt=something1:something1:somerandomcharacters

答え3

一重引用符と二重引用符を区切り文字として使用できます。先週は区切り文字を全く使わない人を見ました。プロトコル部分の前の文字を終了インジケータとして使用しようとすると、残念です。相対パスを持つことも有効なリンクでもあります。 aタグにhref属性を含めるか、imgタグにsrc属性を含めることができます。

正しい方法は、文書全体をhtml / xmlに解析し、すべての要素を繰り返してすべての属性を抽出し、パターンと値を一致させることです。相対パスに興味がある場合は、ダウンロードに使用されるURLに展開する必要があります。 PHPまたはPerlにはDOMツリーを解析する機能が必要です。 grepまたは同様の機能を使用する他のすべてのソリューションは、一部のURLをスキップしたり早期に切り捨てたりする可能性があります。

たぶんカールまたはwget(wget)には、そのリストを生成する素晴らしい機能があるかもしれません。おそらくスパイダーモードのwgetである可能性が高いです。

関連情報