ベースのレベルを制御できることを除けば、 UNIXに似たプログラムを作成しようとしています。basename
たとえば、プログラムは次のようなタスクを実行します。
$PROGRAM /PATH/TO/THE/FILE.txt 1
FILE.txt # returns the first level basename
$PROGRAM /PATH/TO/THE/FILE.txt 2
THE/FILE.txt #returns the second level basename
$ PROGRAM /PATH/TO/THE/FILE.txt 3
TO/THE/FILE.txt #returns the third level base name
私はこれを perl で書こうとしていましたが、自分の考えを手早くテストするために、次のコマンドライン スクリプトを使用して第 2 レベルのベース名を取得しましたが、役に立ちませんでした。
$echo "/PATH/TO/THE/FILE.txt" | perl -ne '$rev=reverse $_; $rev=~s:((.*?/){2}).*:$2:; print scalar reverse $rev'
/THE
ご覧のとおり、ディレクトリ名のみが出力され、残りは出力されません。これは、量指定子との貪欲でないマッチングと関係があると思いますが、その分野での私の知識は不足しています。
bashでこれを行うより効率的な方法がある場合は、アドバイスしてください