パスの最初の2つのディレクトリを抽出します。

パスの最初の2つのディレクトリを抽出します。

$ORACLE_HOME変数のパスから最初の2つのディレクトリを抽出する必要があります。

ORACLE_HOME=/oradba/app/oracle/product/11.2.0.4/testdb

私に必要な価値:/oradba/app/

答え1

  1. 切り取りを使用(最後に追加/):

    ORACLE_HOME=$(printf "%s" "$ORACLE_HOME" | cut -d/ -f1-3)/
    
  2. 引数を使用して2回展開します。最初はディレクトリの最初の2つの要素を削除し、2番目は元の変数の残りの要素を削除します。

    suffix=${ORACLE_HOME#/*/*/}
    ORACLE_HOME=${ORACLE_HOME%"$suffix"}
    

答え2

2つのオプション。後者はより複雑ですが、変数にいくつかのディレクトリがあるかどうかを知る必要はないので、より安全です。

$ echo ${ORACLE_HOME%/*/*/*/*}/
/oradba/app/
$ echo $ORACLE_HOME | awk -F/ 'BEGIN {OFS="/"} {print $1,$2,$3,""}'
/oradba/app/

答え3

努力する:

echo $ORACLE_HOME | cut -d/ -f-3

たとえば、

$ ORACLE_HOME=/oradba/app/oracle/product/11.2.0.4/testdb
$ echo $ORACLE_HOME | cut -d/ -f-3
/oradba/app
$

関連情報