2016-05-03 9 views
0

最後のディレクトリのフルネームのみが表示されるように、現在の作業ディレクトリを圧縮する最良の方法を知りたい。私は例を挙げてみましょう:私は作業ディレクトリを圧縮する

~/w/p/src 

を取得する必要があることを、このような一連のコマンドを通じてパイプそれにできるようにしたい

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

私は先頭の~を得るための最初の部分を取得することができます私は

得るよう ${PWD/#$HOME/\~}

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

を行うと、Iパイプ残りを何

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

答えて

1
echo ${PWD/#$HOME/\~} | 
sed -e 's%/\([^/]\)[^/]\{1,\}/%/\1/%g' \ 
    -e 's%/\([^/]\)[^/]\{1,\}/%/\1/%g' 

パターンは、例えば、一致~/src/perl/DBD/Informix/lib/DBD/Informix/src/、マッチングがスラッシュされていない、perlpで再開し、それはすぐに一致しないため、繰り返し正規表現が必要です。 ggpに置き換えて何が起こるかを確認できます。

例:

$ 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 
関連する問題