我目前正在学习如何使用grep
awk
sed
。我遇到了一个具有以下值的变量的问题:new_file="main_folder/test.txt"
。实际上是一个里面有文件的目录。我最初能够使用sed删除文件扩展名。但主要目标是只从变量test
中获取文件名new_file
(无扩展名)。如何将所有内容删除到最后一个文件扩展名?
到目前为止,我所做的一切都是删除扩展
new_file=`rev <<< "$new_file" | cut -d"." -f2- | rev`
示例:
输入
new_file="parent_folder/child_folder/file_name.txt"
new_file2="parent_folder/child_folder/sub_child_folder/file_name2.txt"
期望的输出:
file_name
file_name2
答案 0 :(得分:1)
您可以使用basename
实用程序。
$ new_file="parent_folder/child_folder/file_name.txt"
$ x=$(basename "$new_file" .txt)
$ echo "$x"
file_name
或您的案例
new_file=`basename $new_file | cut -d "." --complement -f2-`
答案 1 :(得分:1)
通过sed,
$ new_file="parent_folder/child_folder/file_name.txt"
$ new_file2="parent_folder/child_folder/sub_child_folder/file_name2.txt"
$ sed 's~.*/\([^/.]*\)\..*$~\1~' <<< "$new_file"
file_name
$ sed 's~.*/\([^/.]*\)\..*$~\1~' <<< "$new_file2"
file_name2
将值分配给另一个变量
$ foo=$(sed 's~.*/\([^/.]*\)\..*$~\1~' <<< "$new_file2")
$ echo "$foo"
file_name2
您可以尝试使用此sed命令。
$ sed 's~.*/\(.*\)\..*$~\1~' <<< "$new_file2"
file_name2