2016-07-26 12 views
0

Ich möchte alle HTML-Tags aus dem Grep-Ergebnis beim Analysieren von HTML-Seite entfernen, so das Ergebnis wäre Klartext, wie zum Beispiel beim Analysieren von PHPinfo, um nur PHP-Version anstelle der vollständigen Zeile zu erhalten HTML-Tags: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> 

Während ich möchte nur bekommen "PHP Version 5.5.33" als Ergebnis.

Ich habe versucht, folgende sed Muster:

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

Aber das Ergebnis ist voll HTML-Code oder alle leer (alle Ausgaben ersetzt wird). Könnten Sie bitte sagen, ob es möglich ist, in diesem Fall nur HTML-Tags mit sed zu entfernen oder in diesem Fall lieber einen anderen Operator zu verwenden? Oder das Problem ist mit Muster?

Vielen Dank im Voraus für irgendwelche Tipps!

+1

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

+1

Das Problem ist mit dem Muster. Auch ist es in diesem speziellen Fall ziemlich einfach, aber im Allgemeinen sollte Regex nicht verwendet werden, um HTML zu analysieren. – 123

Antwort

0

Vielen Dank für die Tipps alle. Nach einigen weiteren Studien, hat das folgende Muster den Trick:

sed -e 's/< [^>] *> // g'

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

Hoffnung, dass es jemand in Zukunft helfen wird.

+0

Markieren Sie diese Antwort als richtig, um es für die Menschen einfacher zu machen, sie zu finden. – kalsowerus

+0

Danke für den Tipp, markiert es. –

0

Standardmäßig sind reguläre Ausdrücke gierig, sie suchen nach der größten Übereinstimmung. Fügen Sie ? zu * ('s/<.*?>//g') hinzu, um den übereinstimmenden Prozess faul zu machen.

+1

sed unterstützt nicht nicht-gierige Regex obwohl – Sundeep

1

Im Allgemeinen sollten Sie XML-Daten nicht mit zeilenorientierten Tools wie sed bearbeiten. Verwenden Sie stattdessen XML-fähige Tools wie xmlstarlet. In diesem Fall könnte das tun, was Sie wünschen:

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

Sie sed nicht brauchen, nur um die parameter expansion zu verwenden. Hier ist der Code:

#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" 

Ausgang:

PHP Version 5.5.33 

Und wenn Sie diese in einem Skript halten möchten, können Sie die Zeichenfolge sparen:

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

Hoffnung, die helfen können Sie.

+0

Danke, nie in Betracht gezogen, ein tatsächliches Skript zu verwenden, obwohl es nur ein Befehl sein sollte. Ich denke jedoch, dass es in Zukunft nützlich sein könnte =) –