問題の説明:1行コマンドで指定されたパス名から不明な文字列(最後の文字列)を抽出したいと思います。
限界:
- パスは動的であり、ユーザー入力によって変更されることがあります。
- 1行のコマンドで最後の文字列を抽出します。
サンプル:
例1:
/home/xyz/Desktop/tools
この場合、単語を抽出するだけですtools
。
例2:
/tmp/my_directory/my_big_dir/my_small/dir/cross
今回も最後の文字列を抽出する必要があります。cross
これを行う方法はありますか?
私はコマンドを試しましたが、cut
パスの長さが動的であるため動作しません。
答え1
basename
私はこれがあなたが探しているコマンドだと思います。
[me@host ~]# basename /home/xyz/Desktop/tools
tools
答え2
他のプログラムを呼び出さなくても、bashや他のシェルでこれを行うことができますが、これははるかに高速です。
$ x=/home/xyz/Desktop/tools
$ echo ${x##*/}
tools
$ y=/tmp/my_directory/my_big_dir/my_small/dir/cross
$ echo ${y##*/}
cross
これを削除すると、##
一致する最も長いプレフィックスが見つかります。*/
答え3
basename /your/full/path
必要な出力を提供します: path