2014-05-21 78 views
1

我有以下字符串:SED正則表達式匹配首次出現

<div class="downloadlist" id="Mactopia_Office2011"><p><a depEvents="DynamicDownloadsLinkClick[url|downloads?pid=Mactopia_Office2011&amp;fid=78B06C3D-0158-4344-8A8B-5FB822CD44D8#viewer|prodID|Mactopia_Office2011]" id="78B06C3D-0158-4344-8A8B-5FB822CD44D8" class="download_link" href="&#xD;&#xA;       ?pid=Mactopia_Office2011&amp;fid=78B06C3D-0158-4344-8A8B-5FB822CD44D8#viewer&#xD;&#xA;      ">Microsoft Office für Mac 2011 14.4.1-Update <span class="link_arrow">&gt;</span></a></p><p><a depEvents="DynamicDownloadsLinkClick[url|downloads?pid=Mactopia_Office2011&amp;fid=F7B8C82F-71FF-4675-8924-DAB652BA6603#viewer|prodID|Mactopia_Office2011]" id="F7B8C82F-71FF-4675-8924-DAB652BA6603" class="download_link" href="&#xD;&#xA;       ?pid=Mactopia_Office2011&amp;fid=F7B8C82F-71FF-4675-8924-DAB652BA6603#viewer&#xD;&#xA;      ">Microsoft Office für Mac 2011 14.3.9-Update <span class="link_arrow">&gt;</span></a></p><p><a depEvents="DynamicDownloadsLinkClick[url|downloads?pid=Mactopia_Office2011&amp;fid=3BEDF6DC-1464-4D17-A5BB-C90F8FEF567C#viewer|prodID|Mactopia_Office2011]" id="3BEDF6DC-1464-4D17-A5BB-C90F8FEF567C" class="download_link" href="&#xD;&#xA;       ?pid=Mactopia_Office2011&amp;fid=3BEDF6DC-1464-4D17-A5BB-C90F8FEF567C#viewer&#xD;&#xA;      ">Microsoft Office für Mac 2011 14.3.8-Update <span class="link_arrow">&gt;</span></a></p><p><a depEvents="DynamicDownloadsLinkClick[url|downloads?pid=Mactopia_Office2011&amp;fid=3445FBDC-E092-4530-BF31-D60CECD53AB8#viewer|prodID|Mactopia_Office2011]" id="3445FBDC-E092-4530-BF31-D60CECD53AB8" class="download_link" href="&#xD;&#xA;       ?pid=Mactopia_Office2011&amp;fid=3445FBDC-E092-4530-BF31-D60CECD53AB8#viewer&#xD;&#xA;      ">Microsoft Office für Mac 2011 14.3.7-Update <span class="link_arrow">&gt;</span></a></p><p><a depEvents="DynamicDownloadsLinkClick[url|downloads?pid=Mactopia_Office2011&amp;fid=EF1E612F-D8E3-4628-9FE4-AD136F0DEBD3#viewer|prodID|Mactopia_Office2011]" id="EF1E612F-D8E3-4628-9FE4-AD136F0DEBD3" class="download_link" href="&#xD;&#xA;       ?pid=Mactopia_Office2011&amp;fid=EF1E612F-D8E3-4628-9FE4-AD136F0DEBD3#viewer&#xD;&#xA;      "> 

我想這部分匹配:「微軟辦公獻給的Mac 14.4.1 2011更新」使用下面的sed命令:s/^.*Microsoft Office f.r Mac 2011 \([^ ]*\)-Update.*$/\1/ 不幸的是,輸出是14.3.7(所以最後發生),我怎麼能在第一次發生後停止,考慮到使用*?進行非貪婪匹配沒有幫助? 謝謝!

+0

有_will_是解析這個 「串」 用'的方式sed',但它很明顯是HTML。你有沒有考慮過解析它?你有興趣使用哪種語言? –

+0

@TomFenech他正在使用sed。 – Taemyr

+0

@Taemyr我可以看到。我建議使用具有內置功能的語言來解析HTML會更好,因爲解決方案將更加簡潔和易於維護。 –

回答

3

您可以使用兩種susbstitution命令,第一個第一次出現後刪除所有字符,而第二個刪除所有前導字符:

sed 's/\(Microsoft Office f.r Mac 2011 \([^ ]*\)-Update\).*$/\1/; s/^.*>//' infile 

它產生:

Microsoft Office für Mac 2011 14.4.1-Update 
+0

謝謝,它的工作! – user3660894

2

如果你不是太依賴sed,你也可以做

perl -pne 's/.*?(Microsoft Office.*?Update).*/$1/' file 

grep -oP 'Microsoft Office.*?Update' file | head -1 
1

Perl有非貪婪正則表達式的支持,所以你可以這樣做:

perl -pe 's|.*?(Microsoft Office f.+?r Mac 2011 \S+-Update).*|$1|' string 

它給你:

Microsoft Office für Mac 2011 14.4.1-Update 

f.r改變了..+?所以當「ü」算作一個以上的字符時它仍然有效。我還使用了\S(非空白)字符類。

1

可以使用awk只是抓住從字符串的第一個數據,你會得到:

awk -F " &" '{gsub(/<[^>]*>/,"");$1=$1;print $1;exit}' file 
Microsoft Office für Mac 2011 14.4.1-Update 
1

您也可以嘗試這個命令,如果只有四根弦(Microsoft Office für Mac 2011 14.4.1-Update)出現在該行,

sed -rn 's/^.*[ ]+\">([^<]*)<.*[ ]+\">([^<]*)<.*[ ]+\">([^<]*)<.*[ ]+\">([^<]*)<.*$/\1/p' file.txt 

輸出:

Microsoft Office für Mac 2011 14.4.1-Update