1

我有以下字符串:

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

我正在尝试匹配这部分:“Microsoft Office für Mac 2011 14.4.1-Update”使用以下 sed 命令:s/^.*Microsoft Office f.r Mac 2011 \([^ ]*\)-Update.*$/\1/ 不幸的是输出是 14.3.7(所以最后一次出现)如何在第一次出现后停止,考虑到使用*?非贪婪匹配没有帮助?

4

5 回答 5

3

您可以使用两个替换命令,第一个删除第一次出现后的所有字符,第二个删除所有前导字符:

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

它产生:

Microsoft Office für Mac 2011 14.4.1-Update
于 2014-05-21T13:26:37.173 回答
2

如果你不是太依赖于sed,你也可以这样做

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

或者

grep -oP 'Microsoft Office.*?Update' file | head -1
于 2014-05-21T13:45:57.653 回答
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

我将.in更改f.r.+?,当“ü”算作多个字符时,它仍然有效。我还使用了\S(非空白)字符类。

于 2014-05-21T13:47:01.080 回答
1

您可以使用从字符串中获取第一个数据,awk然后得到:

awk -F " &" '{gsub(/<[^>]*>/,"");$1=$1;print $1;exit}' file
Microsoft Office für Mac 2011 14.4.1-Update
于 2014-05-21T14:06:32.427 回答
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 
于 2014-05-21T14:58:05.800 回答