The Issue of the Day Before

在 shell script 中移除附檔名

shell -
echo "/abc.dir/.profile" | sed -re 's/(^.*[^/])\.[^./]*$/\1/'

How

  • 使用 sed 去掉最後一個 . 之後的文字

> echo "/xyz.dir/file.ext" | sed -e 's/\.[^./]*$//'
// ~> /xyz.dir/file
// 等同
> filename="/xyz.dir/file.ext"
> echo "${filename%.*}"
  • 使用 sed 去掉最後一個 / 之後第一個 . 之後的文字

> echo "/xyz.dir/x.file.ext" | sed -e 's/\.[^/]*$//'
// ~> /xyz.dir/x
  • 使用 sed 去掉最後一個 . 之後的文字,但排除只有一個 . 開頭的隱藏檔

echo "/xyz.dir/.file" | sed -re 's/(^.*[^/])\.[^./]*$/\1/'
// ~> /xyz.dir/.file

但你想要一個涵蓋正確處理隱藏檔但又要去掉檔名中所有 . 之後的文字

該怎麼做?

閱讀在雲端