sedを最後ではなく最初に表示する方法は?

sedを最後ではなく最初に表示する方法は?

私の文字列:

<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/.*>//文字列の先頭から最後の文字まで>すべての内容を切り捨てます。ここにあります。頼るできるだけ.*一致させてくださいスタートひも。

おすすめ記事