如何使用 sed 仅获取文件名?我有这个
out_file=$(echo $in_file|sed "s/\(.*\.\).*/\1mp4/g")
Run Code Online (Sandbox Code Playgroud)
但我也得到了路径/root/video.mp4
,而且我只想要video.mp4
.
ulo*_*sEI 33
basename
来自 GNU coreutils 的可以帮助您完成这项工作:
$ basename /root/video.mp4
video.mp4
Run Code Online (Sandbox Code Playgroud)
如果您已经知道文件的扩展名,则可以basename
使用以下语法调用basename NAME [SUFFIX]
以删除它:
$ basename /root/video.mp4 .mp4
video
Run Code Online (Sandbox Code Playgroud)
或者另一种选择是使用sed
以下方法在最后一个点之后切割所有内容:
$ basename /root/video.old.mp4 | sed 's/\.[^.]*$//'
video.old
Run Code Online (Sandbox Code Playgroud)
使用以下任何一种方式:
out_file="${in_file##*/}"
out_file="$(basename $in_file)"
out_file="$(echo $in_file | sed 's=.*/==')"
out_file="$(echo $in_file | awk -F"/" '{ print $NF }')"
Run Code Online (Sandbox Code Playgroud)
附:您会得到相同的字符串,因为在您的语句\(.*\.\)
中,从开头到点 ( /root/video.
)匹配字符串,然后您手动添加.mp4
与原始字符串相同的字符串。你应该s=.*\([^/]*\)=\1=
改用。
更新:(第一个现已修复)
要获得唯一没有扩展名的文件名,您可以:
out_file="$(echo $in_file | sed 's=.*/==;s/\.[^.]*$/.new_ext/')"
out_file="$(echo $in_file | sed 's=\([^/]*\)\.[^./]*$=\1.new_ext=')"
out_file="$(echo $in_file | awk -F"/" '{ gsub (/\.[^/.]*$/,".new_ext",$NF);print $NF }'
Run Code Online (Sandbox Code Playgroud)