gpt4 book ai didi

regex - 在 perl 中处理 curl 输出

转载 作者:行者123 更新时间:2023-12-01 12:15:39 24 4
gpt4 key购买 nike

我正在处理 curl -s 的输出.具体来自此页面:https://support.microsoft.com/en-us/help/971058/how-do-i-reset-windows-update-components

在陈述我的目标之前,我会提到我只对从该页面的 curl 输出中提取所需数据的答案感兴趣。 (我知道此页面上建议的操作已经以文本、powershell 脚本等形式提供)

最终目标是获取 dll 列表。它快速完成它而没有任何大惊小怪(所以单行),但它现在已成为我的学习经验。基本的正则表达式是 /regsvr32.exe (.*?\.dll)/ .

我感兴趣的 curl 输出看起来像这样(注意没有换行符):

<li>regsvr32.exe a.dll</li><li>regsvr32.exe b.dll</li>等等

所以我尝试了如下的 perl: perl -F"li" -lane 'print $1 if /regsvr32.exe (.*?\.dll)/g'

(逻辑是我可以在任何出现的“li”上草率地拆分并且仍然应该得到合理的结果我可以稍后微调)

我无法获得 -F工作完全。我尝试了单个字符,我尝试了像/PATTERN/这样的正则表达式,我尝试省略其他各种标志(特别是 -l ),我写了一个单行代码来显示拆分。我无法使 split 发生。

然后我检查了 curl 手册页,看它是否有任何可能有用的输出清理程序。这是一个很长的手册页,但我什么也没看到。

然后我想到,如果我编写的 perl 能够正常工作,那么无论同一个正则表达式是否在同一行上多次匹配,那就太好了。但我找不到任何适合单线的东西。

我能找到的以单行方式产生所需输出的最明智的做法是:

curl -vs \
https://support.microsoft.com/en-us/help/971058/how-do-i-reset-windows-update-components 2>&1 | \
perl -pe 's|</li>|\n|g' | \
perl -lne 'print $1 if /regsvr32.exe (.*?\.dll)/'

谁能提出一些不那么荒谬的建议?

另外,我喜欢任何比 perldoc perlrun 更有启发性的 Perl 的 -F 参数解释。

最佳答案

无需在 <li> 上拆分元素或使用解析器(你不关心文档的结构),所以你可以只搜索 regsvr32.exe串到下一个<性格。

curl $msft_url | perl -lane 'print for ( m|regsvr32.exe (.+?.dll)<|g );'

要处理多个捕获,您将需要一个额外的 while循环迭代匹配对。 shift命令从数组中拉出第一个元素,reverse命令反转数组。这会捕获 2 个字符串并以相反的顺序打印它们:

curl $msft_url | perl -lane '@m = m|(regsvr32).exe (.+?.dll)<|g; while (@m) { print join " ", reverse(shift @m, shift @m) };'

关于regex - 在 perl 中处理 curl 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48533567/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com