我需要提取变量 $ORACLE_HOME 中的路径中的前 2 个目录
ORACLE_HOME=/oradba/app/oracle/product/11.2.0.4/testdb
我需要的值:/oradba/app/
答案1
使用剪切(在最后添加
/
):ORACLE_HOME=$(printf "%s" "$ORACLE_HOME" | cut -d/ -f1-3)/
使用参数扩展两次;第一个删除目录的前两个元素,然后第二个删除原始变量的剩余元素:
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
$