我喜欢自定义 PS1 提示符并包括当前目录。
我还有其他几个项目,例如时间、用户、git 分支等,即
然而,一个问题是,当我当前的目录有很多层“深”时,例如/home/durrantmm/Dropnot/webs/rails_apps/linker/app/views
文本太多。 (顺便说一句,无论如何,我在 PS1 提示设置的末尾回车,所以我的实际 $ 回到了左侧,这不是这里的问题)。
所以我有一个解决方案,将其用于位置部分:
LOCATION='\033[01;34m\]`pwd | sed "s#\(/[^/]\+/[^/]\+/[^/]\+/\).*\(/[^/]\+/[^/]\+\)/\?#\1_\2#g"`'
不漂亮,但它完成了工作,然后我将它与其他东西结合起来(未显示,此处不需要),我得到目录的“前 3 个级别 _ 最后两个级别”,即
不幸的是,虽然在我的 mac 上 sed 部分无法正常工作,但我得到:
[这实际上是来自我的 Linux 机器,我伪造它是为了展示它在我的 mac 上的样子,以防你想知道)。
如何获取3_2
Mac 上当前目录的格式?
答案1
命令的\+
和部分是 GNU 扩展 - POSIX 兼容根本无法使用扩展正则表达式的这些方面。相反,您可以使用和。尝试这个:\?
sed
sed
\{1,\}
\{0,1\}
LOCATION='\033[01;34m\]`pwd |
sed "s#\(/[^/]\{1,\}/[^/]\{1,\}/[^/]\{1,\}/\).*\(/[^/]\{1,\}/[^/]\{1,\}\)/\{0,1\}#\1_\2#g"`'
有关这方面的更多信息,请参阅 -http://pubs.opengroup.org/onlinepubs/009696699/utilities/sed.html和http://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap09.html。
sed
或者,您可以使用.OSX 在 OSX 上启用扩展正则表达式-E
。有了这个你可以这样做:
LOCATION='\033[01;34m\]`pwd |
sed -E "s#\(/[^/]+/[^/]+/[^/]+/\).*\(/[^/]+/[^/]+\)/?#\1_\2#g"`'
然而,这在 GNU 上不起作用sed
(它用于-r
此目的)。使用 POSIX 解决方案将提供更好的可移植性。