2011-12-14 13 views
1

は、ここに私の現在のgrepである:grep throughと一致する場合はhrefの内容を返しますか?

私はすべてのファイルに目を通すと、インスタンスを見つける「戦い/」とし、それを指しているリンク何のリストをコンパイルしたい
grep -l -R "battle/" * > /home/results.txt 
(This returns the files that it is in) 

。例えば

<a href="http://www.site.com/battle/index.php">Index</a> 
<a href="http://www.site.com/battle/contact.php">Contact</a> 
<a href="http://www.site.com/battle/go/here/folder/file.php">Long weird path</a> 

そして、私はgrepの結果がそうのように返すようにしたい:

http://www.site.com/battle/index.php 
http://www.site.com/battle/contact.php 
http://www.site.com/battle/go/here/folder/file.php 

は基本的に、我々は削除されているフォルダ内のページへのリンクを持っているので、我々がしたいですこれらのページでどのリンクがまだ使用されているかを確認します。

私はバトルのために捜索したいと思います。

結果をresults.txtファイルに出力します。

どうすればこのgrepを実行できますか?ありがとう:)

答えて

2

これを100%信頼できるようにするのは難しいことです。あなたが望むものを見逃したり、あなたがしていないものをキャッチしたりするリスクはありません。良い第一近似は次のようになります。

grep -R -o 'http://www.site.com/battle/[^"]*' * > /home/results.txt 

-oフラグは、実際のマッチした文字列ではなく、全体のラインは、それらを含む「のみ」を出力すると言う。)

言うまでもなく、このウォン」 <a href="/battle/contact.php">などの相対URLを使用してリンクをキャッチすることはできません。URLが二重引用符ではなく一重引用符で囲まれていると混乱します。 。 。それが間違っていけるさまざまな方法があります。 grepは基本的に、入力データの正確な形に自信を持って制限されています。入力データが最初にgrepで作成されなかった場合、完全な信頼を得るのは難しいかもしれません。

+0

いいです。私はおそらく、 'href =" [^ "] */battle/[^"] * "'のようなものを得るために 'href =" ... "相対URLを捕まえることができるhrefと引用符を削除するためにsedを使用します。そして、いかにして私が欲しかったかに応じて。 –

関連する問題