1

このコードはシェルスクリプトにあります。これは、ファイル名のドット(。)を含むすべての拡張子を削除し、そのように名前だけを返すこと/home/user/filenameです。しかし、問題は、ディレクトリ構造さえも削除して、このようなファイル名だけを返すようにしたいということですfilename

拡張子のみを削除するコードは次のとおりです。

filename="/home/user/filename.php.txt.doc"      
newname=${filename%%.*}
echo $newname
/home/user/filename

ディレクトリ拡張子を含めずにファイル名だけを取得する方法はありますか?

filename

ありがとう

4

3 に答える 3

3

"${filename##*/}"ファイルの名前を取得してみてください。

$ filename="/home/user/filename.php.txt.doc"      
$ newname=${filename%%.*}
$ newname=${newname##*/}
$ echo $newname
filename

または、次を使用しますbasename

$ filename="/home/user/filename.php.txt.doc"      
$ newname="$(basename ${filename%%.*})"
$ echo $newname

単一のsedコマンドでそれを行うこともできますが、それは少し読めないので、私はしません:

$ sed 's|.*/\([^\.]*\).*|\1|g' <<< "$filename"
filename
于 2012-11-01T14:31:30.400 に答える
0

次のように、フィールドセパレータを使用awkして最後のフィールドを取得できます。filename/

newname=$(echo "$newname" | awk -F"/" '{print $NF}')

この行をコードに追加します。

filename="/home/user/filename.php.txt.doc"      
newname=${filename%%.*}
newname=$(echo "$newname" | awk -F"/" '{print $NF}')
echo $namename

出力:

filename
于 2012-11-01T14:34:45.963 に答える
0
newname=$(basename "$filename")
newname=${newname%%.*}
echo $newname
filename
于 2012-11-01T14:35:54.270 に答える