ファイル名の拡張子部分(例:solution.txt - > sol.txt)を抽出するには?

ファイル名の拡張子部分(例:solution.txt - > sol.txt)を抽出するには?

solution.txt拡張子(例:->)を含むファイル名の一部を抽出する必要がありますsol.txt

答え1

パラメータ拡張の使用:

$ file="solution.txt"
$ echo "${file:0:3}.${file##*.}"
sol.txt

答え2

sedとPythonを使用して完了

echo "solution.txt" |sed "s/\(...\)\([a-z]\{5\}\)\(....\)/\1\3/g"

出力

sol.txt

Pythonの使用

 a="solution.txt"
print a[0:3] + a[-4:]

出力

sol.txt

答え3

別のアプローチは、ファイル名を対応するコンポーネントに分割し、所望の形式に再構成することである。

#!/bin/sh
origname="$1"
# directory = everything from "origname" except the part after the last /
directory="${origname%/*}"
if [ "$origname" = "$directory" ]; then
    # there was no directories in the original name at all
    directory="."
fi
# to get the filename, remove everything up to the last /
filename="${origname##*/}"
# to get the extension, remove everything up to the last .
extension="${origname##*.}"

# take first 3 characters of original filename as a new name
newname="$(echo "$filename" | cut -c 1-3)"

# output the result
echo "${directory}/${newname}.${extension}"

これは長いですが、ユースケースに合わせて理解して修正する方が簡単です。

関連情報