gpt4 book ai didi

regex - 纯粹使用 bash 正则表达式压缩工作目录

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:56:38 25 4
gpt4 key购买 nike

我想知道压缩当前工作目录的最佳方法,以便只有最后一个目录的全名可见。让我举个例子:

$ echo $PWD
/Users/mac/workshop/project1/src

我希望能够对其进行 bash 正则表达式替换 操作,以便我可以获得 ~/w/p/src

我可以通过 ${PWD/#$HOME/\~} 获得领先的第一部分 ~}

$ echo ${PWD/#$HOME/\~}
~/workshop/project1/src

我可以做哪些其他正则表达式操作(是否可以链接正则表达式运算符?)以便我得到以下内容

$ echo ${PWD/#$HOME/\~} ...
~/w/p/src

请注意,我只需要使用 bash,即不需要 sed、awk、grep 等。

这样做的目的是,我可以根据 bash 设置 PROMPT 值,即

在我的 .bashrc 中,我想:

export PROMPT=${PWD/#$HOME/\~}...

最佳答案

只用 bash 就可以做到,但并不像您想要的那么简单:

$ squashPWD() {     
local pwd parts part
IFS=/ read -ra parts <<< "${PWD/#$HOME/\~}"
for part in "${parts[@]:0:${#parts[@]}-1}"; do
pwd+="${part:0:1}/"
done
echo "$pwd${parts[-1]}"
}

$ pwd
/home/jackman/tmp/adir/foo

$ squashPWD
~/t/a/foo

$ cd /usr/local/share/doc/fish/

$ squashPWD
/u/l/s/d/fish

如果你不需要 bash:

squashPWD() { perl -pe 's/^$ENV{HOME}/~/; s{([^/])[^/]*(?=/)}{$1}g' <<<"$PWD"; }

无论哪种方式,您的提示都可以是这样的:

PS1='\u@\h:$(squashPWD) \$ '

关于regex - 纯粹使用 bash 正则表达式压缩工作目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37011794/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com