2016-07-26 11 views
0

HTMLページを解析して結果がプレーンテキストになるようにgrep結果からすべてのHTMLタグを削除したい場合 たとえば、phpinfoを解析して、フルラインの代わりにPHPバージョンのみを取得する場合HTMLタグ:sed HTML</ >タグ

$curl -i http://piscina.tienda/phpinfo.php | grep 'PHP Version' | head -1 
href="http://www.php.ne.... alt="PHP logo" /></a><h1 class="p">PHP Version 5.5.33</h1> 

私は結果として「PHPバージョン5.5.33」のみを取得したいと思いますが、

私はsedのパターンを、次の試してみました:

sed -e 's/<.*>//g' 
sed -e 's/^<.*>$//g' 

しかし、結果はHTMLコードまたは(すべての出力が交換された)すべての空白がいっぱいです。 この場合、sedを使用してHTMLタグのみを削除することができますか、この場合は他の演算子を使用する方がよいでしょうか?それともパターンに問題がありますか?

ご協力いただきありがとうございます!

+1

'sed -e 's/<\/?[^>] *> // g''ですか? – anishsane

+1

パターンに問題があります。また、この特定のケースでは非常に簡単ですが、一般的に、正規表現をhtmlの解析に使用しないでください。 – 123

答えて

0

皆さん、ありがとうございました。

のsed -eさん/ < [^>] *> // G '

$ curl -is http://piscina.tienda/phpinfo.php | grep 'PHP Version' | head -1 | sed -e 's/<[^>]*>//g' 
PHP Version 5.5.33 

それが将来的に誰かを助けることを願っています:いくつかの追加の研究の後、次のパターンはトリックをしました。

+0

人々が簡単に見つけることができるように、この回答を正しいとマークしてください。 – kalsowerus

+0

チップをありがとう、それをマーク。 –

0

デフォルトでは、正規表現は貪欲で、最大の一致を検索します。 ?*'s/<.*?>//g')に追加して、マッチングプロセスを遅延させます。

+1

sedは非貪欲な正規表現をサポートしていませんが、 – Sundeep

1

一般に、sedのような行指向ツールを使用してXMLデータを操作しないでください。代わりにxmlstarletのようなXML対応のツールを使用してください。

xmllint --html --xpath '//text()' 
0

あなただけparameter expansionを使用し、sedを必要としない。この場合、これはあなたがやりたいことがあります。ここでは、コードは次のようになります。

#save the first line into a variable 
line='href="http://www.php.ne.... alt="PHP logo" /></a><h1 class="p">PHP Version 5.5.33</h1>' 
tempstr=${line%<*} 
result=${tempstr##*>} 
echo "$result" 

出力:

PHP Version 5.5.33 

そして、あなたはスクリプトにそれらを保持したい場合は、あなたがで文字列を保存することができますすることができます

line=$(curl -i http://piscina.tienda/phpinfo.php | grep 'PHP Version' | head -1) 

・ホープ君は。

+0

ありがとうございました。実際のスクリプトを使用することは決して考えられませんでしたが、単なるコマンドにしたいと思っていました。しかし、将来的には役に立つかもしれないと思う=) –