我有以下字符串:
<div class="downloadlist" id="Mactopia_Office2011"><p><a depEvents="DynamicDownloadsLinkClick[url|downloads?pid=Mactopia_Office2011&fid=78B06C3D-0158-4344-8A8B-5FB822CD44D8#viewer|prodID|Mactopia_Office2011]" id="78B06C3D-0158-4344-8A8B-5FB822CD44D8" class="download_link" href="
 ?pid=Mactopia_Office2011&fid=78B06C3D-0158-4344-8A8B-5FB822CD44D8#viewer
 ">Microsoft Office für Mac 2011 14.4.1-Update <span class="link_arrow">></span></a></p><p><a depEvents="DynamicDownloadsLinkClick[url|downloads?pid=Mactopia_Office2011&fid=F7B8C82F-71FF-4675-8924-DAB652BA6603#viewer|prodID|Mactopia_Office2011]" id="F7B8C82F-71FF-4675-8924-DAB652BA6603" class="download_link" href="
 ?pid=Mactopia_Office2011&fid=F7B8C82F-71FF-4675-8924-DAB652BA6603#viewer
 ">Microsoft Office für Mac 2011 14.3.9-Update <span class="link_arrow">></span></a></p><p><a depEvents="DynamicDownloadsLinkClick[url|downloads?pid=Mactopia_Office2011&fid=3BEDF6DC-1464-4D17-A5BB-C90F8FEF567C#viewer|prodID|Mactopia_Office2011]" id="3BEDF6DC-1464-4D17-A5BB-C90F8FEF567C" class="download_link" href="
 ?pid=Mactopia_Office2011&fid=3BEDF6DC-1464-4D17-A5BB-C90F8FEF567C#viewer
 ">Microsoft Office für Mac 2011 14.3.8-Update <span class="link_arrow">></span></a></p><p><a depEvents="DynamicDownloadsLinkClick[url|downloads?pid=Mactopia_Office2011&fid=3445FBDC-E092-4530-BF31-D60CECD53AB8#viewer|prodID|Mactopia_Office2011]" id="3445FBDC-E092-4530-BF31-D60CECD53AB8" class="download_link" href="
 ?pid=Mactopia_Office2011&fid=3445FBDC-E092-4530-BF31-D60CECD53AB8#viewer
 ">Microsoft Office für Mac 2011 14.3.7-Update <span class="link_arrow">></span></a></p><p><a depEvents="DynamicDownloadsLinkClick[url|downloads?pid=Mactopia_Office2011&fid=EF1E612F-D8E3-4628-9FE4-AD136F0DEBD3#viewer|prodID|Mactopia_Office2011]" id="EF1E612F-D8E3-4628-9FE4-AD136F0DEBD3" class="download_link" href="
 ?pid=Mactopia_Office2011&fid=EF1E612F-D8E3-4628-9FE4-AD136F0DEBD3#viewer
 ">
我正在尝试使用以下sed命令匹配此部分:“MicrosoftOfficefürMac2011 14.4.1-Update”:s/^.*Microsoft Office f.r Mac 2011 \([^ ]*\)-Update.*$/\1/
不幸的是输出是14.3.7(所以最后一次出现)如何在第一次出现后停止输出,考虑到使用*?
进行非贪婪匹配没有帮助?
答案 0 :(得分:3)
您可以使用两个susbstitution命令,第一个用于删除第一个出现后的所有字符,第二个用于删除所有前导字符:
sed 's/\(Microsoft Office f.r Mac 2011 \([^ ]*\)-Update\).*$/\1/; s/^.*>//' infile
它产生:
Microsoft Office für Mac 2011 14.4.1-Update
答案 1 :(得分:2)
如果您与sed
没有太多联系,您也可以
perl -pne 's/.*?(Microsoft Office.*?Update).*/$1/' file
或
grep -oP 'Microsoft Office.*?Update' file | head -1
答案 2 :(得分: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
(非空白)字符类。
答案 3 :(得分:1)
您可以使用awk
从字符串中获取第一个数据,然后获得:
awk -F " &" '{gsub(/<[^>]*>/,"");$1=$1;print $1;exit}' file
Microsoft Office für Mac 2011 14.4.1-Update
答案 4 :(得分: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