GNU Sed 4.8-1表达式未正确提取捕获组反而输出整个文件的问题排查
解决GNU Sed替换后输出整个文件的问题
看起来你遇到的核心问题是Sed的默认输出行为导致的,我来帮你拆解并修复:
问题根源
GNU Sed默认会输出所有输入行——不管该行是否匹配你的替换规则。你的命令只定义了替换逻辑,但没有限制输出范围,所以不匹配的行会直接原样输出,匹配的行替换后也会输出,最终结果就是整个文件内容都被打印出来,而不是只显示你想要的捕获组。而desed调试工具可能只展示匹配到的结果,所以看起来正常。
修正后的命令
只需加上-n参数(抑制默认输出),并在替换命令末尾添加p(仅打印成功替换后的行):
sed --regexp-extended -n 's#<a href="(/torrent/.+)">.*</a>#\1#p'
关键参数解释
-n:关闭Sed的自动输出功能,让我们完全控制哪些内容会被打印p:作为替换命令的后缀,仅当该行成功匹配并完成替换时,才打印处理后的结果
额外注意事项
如果你的输入文件中,HTML标签里的引号是实际的"而非转义后的"(比如原始HTML未转义),那你需要把正则里的"替换为",调整后的命令如下:
sed --regexp-extended -n 's#<a href="(/torrent/.+)">(.*)</a>#\1#p'
这样就能精准提取你想要的/torrent/4384536/HorribleSubs-Black-Clover-128-720p-mkv部分了。
内容的提问来源于stack exchange,提问作者Papu
相关产品推荐
相关产品推荐

