从特定字符(或之后)+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


以上是从特定字符(或之后)+Bash剪切所有内容的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>