特定の数のファイルからすべてのURIを抽出する方法はmagnet:
file:
?各行にURIを出力として含めたい。これを達成するためにbashを使用したいのですが、どんな提案でも歓迎します。私はDebian 7を使用しています。
入力は、任意の名前を持つHTMLファイルの束です。 URIはすべてa href
HTMLタグになっています(例:)<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である可能性が高いです。