私の文字列:
<p> <strong>Linux x86_64/AMD64/EM64T</strong><br> Latest Long Lived Branch Version: <a href="https://www.nvidia.com/Download/driverResults.aspx/163238/en-us">450.66</a><br> Latest Short Lived Branch Version: <a href="https://www.nvidia.com/Download/driverResults.aspx/150803/en-us">435.21</a><br> Latest Legacy GPU version (390.xx series): <a href="https://www.nvidia.com/Download/driverResults.aspx/160182/en-us">390.138</a><br> Latest Legacy GPU version (340.xx series): <a href="https://www.nvidia.com/Download/driverResults.aspx/156163/en-us">340.108</a><br> Latest Legacy GPU version (304.xx series): <a href="https://www.nvidia.com/Download/driverResults.aspx/123709/en-us">304.137</a><br> Latest Legacy GPU Version (71.86.xx series): <a href="https://www.nvidia.com/object/linux-display-amd64-71.86.15-driver.html">71.86.15</a><br> Latest Legacy GPU Version (96.43.xx series): <a href="https://www.nvidia.com/object/linux-display-amd64-96.43.23-driver.html">96.43.23</a><br> Latest Legacy GPU Version (173.14.xx series): <a href="https://www.nvidia.com/Download/driverResults.aspx/71303/en-us">173.14.39</a><br> <a href="https://www.nvidia.com/object/linux-amd64-display-archive.html">Archive</a></p>
この文字列をパイプして最後のバージョン番号をsed 's|^.*">\([0-9\.]*\)<.*$|\1|'
生成します。173.14.39
しかし、私が望むのは450.66
最初のバージョン番号です。sed
これを達成するには、上記のパラメータをどのように編集する必要がありますか?
まだ初心者なのでsed
詳しい説明をお願いします。
ベストアンサー1
貪欲なので、.*
表現の残りの部分が何でも一致する前に、できるだけ一致します。だから、最初のゲームではなく最後のゲームを得ることです。
解決策は、2つの代替を実行することです。 1つは目的の数字の後にあるすべてのHTMLタグを削除し、もう1つは残りの文字列の先頭にあるタグを削除します。
$ sed -e 's/\([[:digit:]]\)<.*/\1/' -e 's/.*>//' file
450.66
最初の式は、s/\([[:digit:]]\)<.*/\1/
文字列の終わりを文字の前にある最初の数字に置き換えます<
。私たちは、文字列が次の場所で切り取られることを保証します。最初[[:digit:]]<
私たちが使用した後の一致.*
後ろにそのパターン。
この表現は私たちに次の事実を残します。
<p> <strong>Linux x86_64/AMD64/EM64T</strong><br> Latest Long Lived Branch Version: <a href="https://www.nvidia.com/Download/driverResults.aspx/163238/en-us">450.66
2番目の式は、s/.*>//
文字列の先頭から最後の文字まで>
すべての内容を切り捨てます。ここにあります。頼るできるだけ.*
一致させてくださいスタートひも。