如何从此 echo "/home/test/var/opt" 中剪切前 3 个文件夹?我需要结果“/home/test/var”

如何从此 echo "/home/test/var/opt" 中剪切前 3 个文件夹?我需要结果“/home/test/var”

如何从字符串中剪切前 3 个文件夹?

例如:

echo "/home/source/Oracle/test" |cut -d'/' -f4 

仅给出一个文件夹名称,但我需要最多第三个文件夹,如下所示:

echo "/home/test/var/opt" | ... command here ...

应该返回/home/test/var

答案1

使用cut -d "/" -f1-4

ebvjr@Maintenance:~$ echo /home/test/var/opt | cut -d "/" -f1-4
/home/test/var

答案2

cut正如 @ebvjr 所说,很好,只需记住您需要 4 个字段,因为第一个字段是空的。

如果你grep那么代码更长但可能更直观({3}=第三个子文件夹)。

grep -Po "(/[^/]+){3}" <<<"/home/test/var/opt"
/home/test/var

答案3

我已经通过下面的 awk 方法完成了

命令

echo "/home/test/var/opt"| awk -F "/" 'OFS="/"{print $1,$2,$3,$4}'

输出

/home/test/var

答案4

通常,路径名是通过两个实用程序basenamedirname或通过参数替换来修改的,而不是通过基于行的文本编辑实用程序。

cut这是因为,从技术上讲,路径名可能包含换行符,这将使得使用基于行的工具(例如(或sedawk等))可靠地工作变得困难。

您拥有的示例是获取 的父目录的路径名/home/test/var/opt。最好这样做

dirname /home/test/var/opt

这样就可以返回了/home/test/var。即使给定的路径名/​​末尾有 a,这也会起作用。

相关内容