删除所有内容,包括最后一个" /"来自变量值

时间:2014-10-09 23:51:43

标签: linux bash unix awk sed

我目前正在学习如何使用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

2 个答案:

答案 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