シェルコマンドを使用してディレクトリからサブ文字列部分を取得する方法

シェルコマンドを使用してディレクトリからサブ文字列部分を取得する方法

シェルコマンドを使用して、次のディレクトリパスから最後の2つの部分のみを抽出する必要があります。

「Android/2.1/パッケージ/テスト/デバッグ/」

期待される出力: /test/debug

このパスは動的であり、「Android/2/Pipeline/Packages/test/debug/」のように異なるパス値によって変化します。

パス値の残りが変更されていても、最後の2つの部分を抽出できる特定の正規表現を見つけることができませんでした。つまり、「/test/debug」のみを取得します。

どなたか助けていただけるとありがたいです

ありがとう

答え1

さまざまなアプローチがあると思いますが、試してみることができます (pwd をユースケースに適したものに置き換えます)。

echo /$(basename $(dirname $(pwd)))/$(basename $(pwd))

または

pwd | awk -F/ '{print "/" $(NF-1) "/" $(NF)}'

おそらく他にも無数の方法があるでしょう...

答え2

シェルは、変数修飾子、、およびを使用して間接的にこれを行うことができます。%これらは、指定されたパターンの末尾または先頭の一致を削除します。パターンはシェルであることに注意してください。%%###グロブ正規表現ではありません。

次の例では、最後の2つのパス要素を、オプションの末尾の有無にかかわらず出力します。/

$ in="Android/2/Pipeline/Packages/test/debug/"
$ echo $( t=${in%/} && t=${t%/*/*} && echo ${in##$t} )
/test/debug/

関連情報