我正在尝试输出部分文件路径,但删除文件名和路径的某些级别。
目前我有一个for循环做了很多事情,但我正在从完整的文件路径创建一个变量,并想剥去一些位。
例如
for f in (find /path/to/my/file - name *.ext)
会给我
$f = /path/to/my/file/filename.ext
我想要做的是printf / echo一些变量。我知道我能做到:
printf ${f#/path/to/}
my/file/filename.ext
但是我想删除文件名并最终得到:
my/file
有没有简单的方法可以做到这一点而不必使用sed / awk等?
答案 0 :(得分:1)
当您知道自己想要的路径级别时,可以使用cut:
echo "/path/to/my/filename/filename.ext" | cut -d/ -f4-5
如果您想要路径的最后两个级别,可以使用sed
:
echo "/path/to/my/file/filename.ext" | sed 's#.*/\([^/]*/[^/]*\)/[^/]*$#\1#'
说明:
s/from/to/ and s#from#to# are equivalent, but will help when from or to has slashes.
s/xx\(remember_me\)yy/\1/ will replace "xxremember_meyy" by "remember_me"
s/\(r1\) and \(r2\)/==\2==\1==/ will replace "r1 and r2" by "==r2==r1=="
.* is the longest match with any characters
[^/]* is the longest match without a slash
$ is end of the string for a complete match