提取路径中的前 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. 使用参数扩展两次;第一个删除目录的前两个元素,然后第二个删除原始变量的剩余元素:

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

答案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
$

相关内容