pwd | sed "s%^\(/[^/]*/\).*?\(/[^/]+\)$%\1...\2%"
我不确定为什么这不起作用。在第一个捕获组之后,我尝试了贪婪和非贪婪的明星。我什至没有使用前瞻或任何东西。它适用于正则表达式测试器。我正在尝试获取路径的第一个和最后一个文本部分(在压缩它的同时仍然提供我所在目录的想法)。
这是一个 tmux 提示行,所以我试图避免引入像 perl 这样重量级的东西来完成这项工作。
为什么不使用参数扩展?参数扩展比您拥有的命令、管道和外部命令花费更少的处理能力:
start="${PWD#/}"; start="${start%%/*}"
end="${PWD/*\//}"
printf '/%s/…/%s $ ' "$start" "$end"
经过几次尝试,我得到了它:
pwd | sed "s%^\(/[^/]*/\).*\(/[^/]*\)$%\1...\2%"