我想知道压缩当前工作目录的最佳方法,以便只显示最后一个目录的全名。让我举个例子:
$ echo $PWD
/Users/mac/workshop/project1/src
我希望能够通过一系列命令来管道它,以便我得到
~/w/p/src
我可以通过~
${PWD/#$HOME/\~}
的第一部分
$ echo ${PWD/#$HOME/\~}
~/workshop/project1/src
我把剩下的东西管好,以便我得到
$ echo ${PWD/#$HOME/\~} | ...
~/w/p/src
答案 0 :(得分:1)
echo ${PWD/#$HOME/\~} |
sed -e 's%/\([^/]\)[^/]\{1,\}/%/\1/%g' \
-e 's%/\([^/]\)[^/]\{1,\}/%/\1/%g'
重复的正则表达式是必要的,因为模式匹配,例如/src/
中的~/src/perl/DBD/Informix/lib/DBD/Informix
,匹配的简历与p
perl
匹配,这不是'{1}}斜线,因此它不会立即匹配。您可以通过将g
替换为gp
来查看会发生什么。
示例:
$ echo $PWD
/Users/jleffler/src/perl/DBD-Informix/lib/DBD/Informix
$ echo ${PWD/#$HOME/\~} |
> sed -e 's%/\([^/]\)[^/]\{1,\}/%/\1/%g' -e 's%/\([^/]\)[^/]\{1,\}/%/\1/%g'
~/s/p/D/l/D/Informix
$
$ echo ${PWD/#$HOME/\~} |
> sed -e 's%/\([^/]\)[^/]\{1,\}/%/\1/%gp' -e 's%/\([^/]\)[^/]\{1,\}/%/\1/%gp'
~/s/perl/D/lib/D/Informix
~/s/p/D/l/D/Informix
~/s/p/D/l/D/Informix
$
答案 1 :(得分:0)
命令:
sed "s/\/home\/[^\/]*/~/;s_/\(.\)[^/]*_/\1_g" <<<"/home/ssam/Documents/so"
输出:
~/D/s
命令:
sed "s/\/home\/[^\/]*/~/;s_/\(.\)[^/]*_/\1_g" <<<"/homey/singo/Documents/so"
输出:
/h/s/D/s