从特定字符(或之后)+Bash剪切所有内容
我有看起来像这样的文件:filename.bla_1
当然,我不知道文件名中是否包含“_”。可能是 file_name.bla_1。我想编写一个函数来获取文件名并删除末尾的 _#。filename.bla_1 将是 --> filename.bla
echo $filename | rev | cut -d "_" -f2 | rev
如果文件名中没有“ ”,我会这样做,但我想确保这也适用于带有“ ”的文件名
回答
您可以使用参数扩展。在%消除了对价值的右边最短的模式,##去除了左边的最长的匹配:
#! /bin/bash
for f in filename.bla_1
file_name_with_underscores.foo_2
file_name_with_underscores.foo
filename.with_dots.foo_2 ; do
ext=${f##*.}
basename=${f%.*}
echo "$basename.${ext%_*}"
done