压缩工作目录

时间:2016-05-03 17:14:02

标签: bash unix awk sed grep

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

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

我希望能够通过一系列命令来管道它,以便我得到

~/w/p/src

我可以通过~

获取领先${PWD/#$HOME/\~}的第一部分
$ echo ${PWD/#$HOME/\~}
~/workshop/project1/src

我把剩下的东西管好,以便我得到

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

2 个答案:

答案 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