sed:如何从path中提取最后两个(或任意数量)的目录

我真的在寻找一个通用的解决scheme,但为了举例,让我们说我正在寻找path中最深的2个目录。 例如:给定一个path/home/someone/foo/bar ,如何使用sed(或awk)来获取foo/bar

如果path的第一部分总是相同的话,这将是简单的,但在我的情况下,我正在寻找一个适用于任意path的expression式,理想情况下,对于任何深度n

如果pathless于n (在本例中为2)级别,则命令的行为并不重要。

我今天去做这个,发现它很棘手。 我开始写一个循环来代替它,但是我不能动摇这种在一个命令中可能发生的事情。 我可能是错的。 有任何想法吗?

 echo "/your/directory/here/bla" | awk -F"/" '{ print "/"$(NF-1)"/"$NF }' 

应该与一个查找工作,我没有尝试,但是这样的事情应该工作:

 find /yourfolder/structure -type d | awk -F"/" '{ print "/"$(NF-1)"/"$NF }' 

仅供参考,$ NF是awk,$(NF-1)之前发现的最新的字段。

在awk中,将您的字段分隔符更改为斜杠:

 $ echo /home/someone/foo/bar | awk -F / -v OFS=/ '{ print $(NF-1), $NF }' foo/bar 

这将input字段分隔符和输出字段分隔符都设置为斜杠,然后打印倒数第二个字段值,字段分隔符和最后一个字段值。

n值解决scheme

 $ echo /home/someone/foo/bar | awk -F / -vn=3 ' { o = $NF; for (f=1; f<n; f++) o = $(NF-f) "/" o; print o } ' someone/foo/bar 

这使用循环来提取所需数量的目录。