如何使用sed提取URL中最后一个斜杠后的文件名?
解决方法:用Sed提取URL最后一个斜杠后的文件名
当然有啦!你完全不需要依赖那些可能变更的固定路径字符串,只需要让sed匹配最后一个斜杠之前的所有内容并替换为空,就能直接得到目标文件名。
正确的Sed命令
sed 's/.*\///' in_file.txt > out_file.txt
命令逻辑拆解
让我们把这个正则的思路理清楚:
.*:这是正则里的贪婪匹配规则,会从字符串开头开始,尽可能匹配最多的字符,直到碰到最后一个斜杠为止\/:因为斜杠是sed命令的分隔符,所以必须用反斜杠转义,才能表示URL里实际的斜杠字符s/.*\///:整个替换命令的作用就是,把从字符串开头到最后一个斜杠的所有内容替换成空字符串,剩下的自然就是最后一个斜杠后的文件名了
实际效果验证
用你给出的两个URL测试:
https://www.something.com/something/somethingelse/file.zip
https://www.something.com/something/somethingelse/somethingnew/file2.txt
执行命令后,输出文件里会得到:
file.zip file2.txt
额外推荐:更直观的basename命令
其实还有一个更简单的工具——basename,它本来就是专门用来提取文件名的,用法更易懂:
xargs basename < in_file.txt > out_file.txt
这个命令会逐行读取输入文件的URL,用basename提取每个URL的文件名,结果和sed命令完全一致。
内容的提问来源于stack exchange,提问作者Sean Norton
相关产品推荐
相关产品推荐

