我需要在UNIX中打印当前、父级和根目录的路径。我可以使用命令或shell脚本。我已经成功地为当前目录和父级目录打印了路径,但是我不知道如何为根目录打印路径。
这是我已经完成的部分:
- 当前目录:
pwd
- 父级目录:
echo $(pwd) | sed -e s/\\/[^\\/]*$//
gnu sed
echo $(pwd) | sed -r -e 'p; :a; s#(.*)/.*#\1#; H; ta; x' | sed '/^$/d'
pwd | sed -n -e ':a' -e '/./p; s#/[^/]*$##; ta'
。请注意,每次使用标签名称时,-e
选项都会结束。 - Wintermute-e
是不够的。重要的是在每次使用标签名称后拆分 sed 代码,否则 BSD sed 将把其余代码视为标签名称的一部分。您可以使用 -e 'p; :a' -e 's#....'
。根据 FreeBSD 的版本,您还需要使用 -E
而不是 -r
。 - Wintermute我认为使用awk更容易实现这个:
echo $(pwd) | awk 'BEGIN {FS=OFS="/"} {l=NF; while (i++<l-1) {print; NF--}}'
解释
这将从当前目录打印所有目录 --> 根目录。它通过打印行并递减NF
,字段数量来实现此目的。请注意,我已将输入和输出字段分隔符都设置为/
。
和 @josifoski 的想法相同
pwd | sed ':a;\#/\(.*\)/[^/]*# {p;s##/\1#;ba}'
打印并循环,直到只剩下第一个文件夹名称,每次循环都删除路径的最后一个文件夹
s###
中的s
操作即可实现相同的想法,无需转义。 - NeronLeVelus//
这样的空搜索模式意味着使用上一个模式(不是正则表达式的内容,而是正则表达式本身)。因此,对于带有foo
的/./ s//t/;s//z/
,将更改为too
,最终变为zoo
,更改第一个字母(从f
到t
的下一个字母)。 - NeronLeVelu