2016-05-03 4 views
0

Я хочу знать, как наилучшим образом сжать текущий рабочий каталог, чтобы было видно только полное имя последнего каталога. Позвольте мне привести пример:Сжатый рабочий каталог

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

Я хочу, чтобы иметь возможность конвейеру в серии команд таким образом, что я должен получить

~/w/p/src 

я могу получить первую часть получать ведущую ~ по делать ${PWD/#$HOME/\~}

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

что я труба остальное через так что я получаю

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

ответ

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, которая не является слэш, так что он не соответствует сразу , Вы можете увидеть, что происходит, заменив 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 
$ 
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 
Смежные вопросы