如何从字符串中剪切前 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
通常,路径名是通过两个实用程序basename
和dirname
或通过参数替换来修改的,而不是通过基于行的文本编辑实用程序。
cut
这是因为,从技术上讲,路径名可能包含换行符,这将使得使用基于行的工具(例如(或sed
或awk
等))可靠地工作变得困难。
您拥有的示例是获取 的父目录的路径名/home/test/var/opt
。最好这样做
dirname /home/test/var/opt
这样就可以返回了/home/test/var
。即使给定的路径名/
末尾有 a,这也会起作用。