bash、grep、またはsedを使用してファイルから最初の正規表現の結果を取得するにはどうすればよいですか?

bash、grep、またはsedを使用してファイルから最初の正規表現の結果を取得するにはどうすればよいですか?

というファイルがあり、次のような結果が得られindex.htmlましたgrep '<td class="headerCovTableEntryLo">' index.html

<td class="headerCovTableEntryLo">39.2 %</td>
<td class="headerCovTableEntryLo">56.6 %</td>

39.2を求めるだけです。どうすればいいですか?

ベストアンサー1

XMLパーサーを使用できます(例xmlstarlet:。

xmlstarlet fo -H page.html |
    xmlstarlet sel -t -v '//td[@class="headerCovTableEntryLo"][1]' -n 2>/dev/null |
    tr -dc '[:digit:].\n'

出力

39.2

最初の呼び出しはxmlstarletHTMLを解析し、可能であればそれをXMLに変換します。 2番目の呼び出しはXMLを解析し、一致する属性を持つ<td/>最初の要素値を抽出します。最後に、文字列からスペースとパーセント文字を削除します(実際には数字、ドット、改行文字を除くすべてを削除します)。classheaderCovTableEntryLotr

より正確な一致が必要な場合は、パスを//...より具体的にするか、より多くのHTMLを公開する必要があります。

呼び出しを避けるには、tr最初のスペースを除く要素の値を返すだけです(したがって39.2 %返されます39.2)。

xmlstarlet fo -H page.html |
    xmlstarlet sel -t -v 'substring-before(//td[@class="headerCovTableEntryLo"][1], " ")' -n 2>/dev/null

おすすめ記事