次の構造(CSS)にある一連のHTMLファイル内のすべての場所を見つける必要があります。
div.a ul.b
またはXPath:
//div[@class="a"]//div[@class="b"]
grep
ここで私を助けません。この基準に一致するすべてのファイル(およびオプションでその中のすべての場所)を返すコマンドラインツールはありますか?つまり、ファイルが特定のHTMLまたはXML構造に一致する場合、ファイル名を返します。
次の構造(CSS)にある一連のHTMLファイル内のすべての場所を見つける必要があります。
div.a ul.b
またはXPath:
//div[@class="a"]//div[@class="b"]
grep
ここで私を助けません。この基準に一致するすべてのファイル(およびオプションでその中のすべての場所)を返すコマンドラインツールはありますか?つまり、ファイルが特定のHTMLまたはXML構造に一致する場合、ファイル名を返します。
これを試して:
aptitude install html-xml-utils
brew install html-xml-utils
hxnormalize -l 240 -x filename.html | hxselect -s '\n' -c "label.black"
"label.black"
HTML要素の名前を一意に識別するCSSセレクターはどこにありますか。次の名前のヘルパースクリプトを作成しますcssgrep
。
#!/bin/bash
# Ignore errors, write the results to standard output.
hxnormalize -l 240 -x $1 2>/dev/null | hxselect -s '\n' -c "$2"
その後、次を実行できます。
cssgrep filename.html "label.black"
これにより、クラスのすべてのHTMLlabel
要素のコンテンツが生成されますblack
。
引数は、出力の-l 240
改行を解析しないようにするために重要です。たとえば、<label class="black">Text to \nextract</label>
が入力の場合-l 240
、HTMLをに再フォーマットし、<label class="black">Text to extract</label>
列240に改行を挿入します。これにより、解析が簡素化されます。1024以上に拡張することも可能です。
参照:
これを実行するNodeJSを使用してコマンドラインツールを作成しました。CSSセレクターを入力すると、ディレクトリ内のすべてのHTMLファイルが検索され、そのセレクターに一致するファイルが示されます。
cd
検索するディレクトリにElementFinderをインストールしてから、次のコマンドを実行する必要があります。
elfinder -s "div.a ul.b"
詳細については、http://keegan.st/2012/06/03/find-in-files-with-css-selectors/を参照してください。
pupは、HTMLを処理するためのコマンドラインツールです。stdinから読み取り、stdoutに出力し、ユーザーがCSSセレクターを使用してページの一部をフィルター処理できるようにします。
jqに触発されたpupは、ターミナルからHTMLを探索するための高速で柔軟な方法を目指しています。
例:
$ wget http://en.wikipedia.org/wiki/Robots_exclusion_standard -O robots.html
$ pup --color 'title' < robots.html
<title>
Robots exclusion standard - Wikipedia, the free encyclopedia
</title>
ここでのNatの回答によると:
Command-line tools that can be called from shell scripts include:
4xpath - command-line wrapper around Python's 4Suite package
XMLStarlet
xpath - command-line wrapper around Perl's XPath library