[〜#〜] html [〜#〜] のファイルがあり、約150個のアンカータグがあります。これらのタグからのリンク、AKA、<a href="*http://www.google.com*"></a>
。 http://www.google.com 部分のみを取得したい。
Grepを実行すると、
cat website.htm | grep -E '<a href=".*">' > links.txt
これは、必要なリンクではなく、見つかった行全体を返すので、 cut
コマンドを使用してみました。
cat drawspace.txt | grep -E '<a href=".*">' | cut -d’”’ --output-delimiter=$'\n' > links.txt
それが間違っていること、およびそれが機能しないことを除いて、間違ったパラメータに関するいくつかのエラーが表示されます...だから、ファイルも一緒に渡されるはずだったと仮定します。たぶんcut -d’”’ --output-delimiter=$'\n' grepedText.txt > links.txt
。
しかし、可能であれば1つのコマンドでこれを実行したかったので... [〜#〜] awk [〜#〜] コマンドを実行しようとしました。
cat drawspace.txt | grep '<a href=".*">' | awk '{print $2}’
しかし、これも実行されません。まだ終わっていないので、もっと情報を求めていました。
私はバッチファイルを書き込もうとしましたが、FINDSTRは内部コマンドでも外部コマンドでもないことを教えてくれました...ですから、環境変数が台無しになっていると仮定し、Windowsにgrepをインストールしようとしたことを修正するのではなく、同じエラーを与えました....
問題は、HTTPリンクを [〜#〜] html [〜#〜] から取り除く正しい方法は何ですか?それにより、私はそれを私の状況に合わせて機能させます。
追伸参照を表示するのに時間がかかりすぎるほど多くのリンク/ Stack Overflowの投稿を読みました。プロセスの複雑さを示すためにサンプルHTMLが必要な場合は、追加します。
また、Shell/batch/grepコマンド/ terminalコマンドを使用するためにMacとPCを交互に切り替えたので、どちらかまたは私を助けます。
私も正しいディレクトリにいることを指摘したい
HTML:
<tr valign="top">
<td class="beginner">
B03
</td>
<td>
<a href="http://www.drawspace.com/lessons/b03/simple-symmetry">Simple Symmetry</a> </td>
</tr>
<tr valign="top">
<td class="beginner">
B04
</td>
<td>
<a href="http://www.drawspace.com/lessons/b04/faces-and-a-vase">Faces and a Vase</a> </td>
</tr>
<tr valign="top">
<td class="beginner">
B05
</td>
<td>
<a href="http://www.drawspace.com/lessons/b05/blind-contour-drawing">Blind Contour Drawing</a> </td>
</tr>
<tr valign="top">
<td class="beginner">
B06
</td>
<td>
<a href="http://www.drawspace.com/lessons/b06/seeing-values">Seeing Values</a> </td>
</tr>
期待される出力:
http://www.drawspace.com/lessons/b03/simple-symmetry
http://www.drawspace.com/lessons/b04/faces-and-a-vase
http://www.drawspace.com/lessons/b05/blind-contour-drawing
etc.
$ sed -n 's/.*href="\([^"]*\).*/\1/p' file
http://www.drawspace.com/lessons/b03/simple-symmetry
http://www.drawspace.com/lessons/b04/faces-and-a-vase
http://www.drawspace.com/lessons/b05/blind-contour-drawing
http://www.drawspace.com/lessons/b06/seeing-values
これにはgrep
を使用できます。
grep -Po '(?<=href=")[^"]*' file
新しい二重引用符が表示されるまで、href="
の後のすべてを出力します。
あなたの与えられた入力でそれは返します:
http://www.drawspace.com/lessons/b03/simple-symmetry
http://www.drawspace.com/lessons/b04/faces-and-a-vase
http://www.drawspace.com/lessons/b05/blind-contour-drawing
http://www.drawspace.com/lessons/b06/seeing-values
cat drawspace.txt | grep '<a href=".*">'
を記述する必要はないことに注意してください。 grep '<a href=".*">' drawspace.txt
でのcat の無駄な使用を取り除くことができます。
$ cat a
hello <a href="httafasdf">asdas</a>
hello <a href="hello">asdas</a>
other things
$ grep -Po '(?<=href=")[^"]*' a
httafasdf
hello
私の推測では、お使いのPCまたはMacにはデフォルトでlynxコマンドがインストールされていません(Webから無料で入手できます)が、lynxでは次のようなことができます。
$ lynx -dump -image_links -listonly /usr/share/xdiagnose/workloads/youtube-reload.html
出力:参照
Http:行をgrepするのは簡単なことです。また、http:行だけを出力するlynxオプションもあります(lynxには多くのオプションがあります)。
triplee のコメントによると、正規表現を使用してHTMLまたはXMLファイルを解析することは本質的に行われていません。 sed
やawk
などのツールは、テキストファイルの処理に非常に強力ですが、XML、HTML、JSONなどの複雑な構造化データの解析に集約されると、大ハンマーにすぎない。はい、あなたは仕事を終わらせることができますが、時には莫大な費用がかかります。このようなデリケートなファイルを処理するには、よりターゲットを絞ったツールセットを使用して、もう少し巧妙にする必要があります。
XMLまたはHTMLを解析する場合、 xmlstarlet
を簡単に使用できます。
XHTMLファイルの場合、次を使用できます。
xmlstarlet sel --html -N "x=http://www.w3.org/1999/xhtml" \
-t -m '//x:a/@href' -v . -n
どこ -N
は、もしあればXHTML名前空間を与えます。これは、
<html xmlns="http://www.w3.org/1999/xhtml">
ただし、HTMLページは整形式のXMLではないことが多いため、 tidy
を使用して少しクリーンアップすると便利です。上記の例の場合、次のようになります。
$ tidy -q -numeric -asxhtml --show-warnings no <file.html> \
| xmlstarlet sel --html -N "x=http://www.w3.org/1999/xhtml" \
-t -m '//x:a/@href' -v . -n
http://www.drawspace.com/lessons/b03/simple-symmetry
http://www.drawspace.com/lessons/b04/faces-and-a-vase
http://www.drawspace.com/lessons/b05/blind-contour-drawing
http://www.drawspace.com/lessons/b06/seeing-values
grep
を使用して、リンクが含まれるすべての行を抽出し、sed
を使用してURLを引き出します。
grep -o '<a href=".*">' *.html | sed 's/\(<a href="\|\">\)//g' > link.txt;