/home/user1/subdir/foo_1/foo_2/.../foo_n
のようなパスからbashスクリプトを使用してサブディレクトリ名を抽出したいとします。結果:/ /このようなパスからサブディレクトリの名前を抽出する
/ホーム/ user1の/ DIR1 /何か:
subdir
は常にプレフィックスが不変であるが、subdir
いくつかの例を下のサブディレクトリの数は変えることができるので、
/home/user1
の下に存在します:DIR1/ホーム/ user1の/ DIR2 /異なる/この/時間/:RESULT:dir2の
- /ホーム/ user1の/ DIR3 /本/である///最後の例:結果:DIR3
私はこの正規表現を書いたが、それは正しく動作しません:
expr /home/user1/subdir/foo_1/foo_2 : '\/home\/user1\/\(.*\/\)\{1\}'
が、subdir/foo_1
代わりのsubdir
を与えているようです。
ありがとうございます!
'。* \ /'は複数のスラッシュにマッチするのはなぜですか?私は '{1}'を追加しました。あなたのソリューションは動作しますが、なぜ私の正規表現が失敗しているかについて私の頭を浮かべることはできません。 Thanks @Anson – ajmartin
'。*'は常に可能な限り多くの文字と一致します(欲張りの一致)。スラッシュを含むすべての文字に一致します。だから、文字列 'subdir/foo_1/foo_2'では、'。*/'は' subdir/foo_1/'にマッチします。あなたの '{1}'修飾子は '。*'がどのくらい一致するかには影響しません。 '{n}'は直前の式でマッチしたものがn回繰り返されることを意味します。実際に、 '{1}'修飾子は、私が今述べた理由でここでは不要です。私は私の答えを編集し、それを削除しました。 – Anson