Unix 将sed与echo一起使用并读取文件
我想从html文件中删除除使用sed的文件名以外的目录路径。路径如下所示:Unix 将sed与echo一起使用并读取文件,unix,sed,Unix,Sed,我想从html文件中删除除使用sed的文件名以外的目录路径。路径如下所示: <a href="/dir1/dir2/file.mp3" other_tags_here </a> 它删除href=之后的所有内容,只返回href=。如何更正此问题?在sed中,正则表达式匹配最左边最长的匹配。这意味着正则表达式中的最终*/将与行中的最终/匹配。为防止发生这种情况: sed 's|href="/[^/]*/[^/]*/|href="|g' file.html 正则表达式将只与下一个
<a href="/dir1/dir2/file.mp3" other_tags_here </a>
它删除
href=
之后的所有内容,只返回href=
。如何更正此问题?在sed中,正则表达式匹配最左边最长的匹配。这意味着正则表达式中的最终*/
将与行中的最终/
匹配。为防止发生这种情况:
sed 's|href="/[^/]*/[^/]*/|href="|g' file.html
正则表达式将只与下一个/
匹配
在python或perl等语言中,我们可以通过使用非贪婪正则表达式来解决这个问题。因为sed不支持非贪婪正则表达式,所以我们必须尝试使用[^/]*/
之类的技巧来实现类似的效果
标准警告:一般来说,html格式可能非常复杂,有许多特殊情况,正则表达式不适合处理。
使用html时,通常最好使用特定于html的工具(如python的beautifulsoup)
echo '<a href=/1-%one%2026/two%20_three%four/1-%eight.mp3' | sed 's|href="/.*/.*/|href="|g'
sed 's|href="/.*/.*/|href="|g' file.html
sed 's|href="/[^/]*/[^/]*/|href="|g' file.html