我想使用 sed 从 html 文件中删除除文件名之外的目录路径。路径看起来像:
<a href="/dir1/dir2/file.mp3" other_tags_here </a>
在目录和文件名中带有空格 (%) 和其他字符。例如。
<a href="/1-%one%2026/two%20_three%four/1-%eight.mp3"
我只需要保持<a href="1-%eight.mp3" other_tags_here <a/>
. 当我尝试
echo '<a href=/1-%one%2026/two%20_three%four/1-%eight.mp3' | sed 's|href="/.*/.*/|href="|g'
它工作正常。但是,当我从 html 文件中读取时
sed 's|href="/.*/.*/|href="|g' file.html
它删除之后的所有内容href=
并仅返回href=
。我该如何纠正?
在 sed 中,正则表达式匹配最左边最长的匹配。这意味着.*/
您的正则表达式中的 final 将与行上的 final 匹配/
。为了防止这种情况:
sed 's|href="/[^/]*/[^/]*/|href="|g' file.html
正则表达式[^/]*/
将/
只匹配下一个。
在像 python 或 perl 这样的语言中,我们可以通过使用非贪婪的正则表达式来解决这个问题。因为 sed 不支持非贪婪的正则表达式,我们必须尝试使用像[^/]*/
.
标准警告:一般来说,html 格式可能非常复杂,有很多正则表达式不适合处理的特殊情况。使用 html 时,通常最好使用 html 特定的工具(如 python 的 beautifulsoup)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句