"/"で区切られた文字列の始まり...終わりを選択する方法(私の場合はPS1のヒント)

/PS1プロンプト、特に 'で区切られた$ PWD部分をカスタマイズしています。

そのうち、私は現在のディレクトリが欲しいです。
しかし、ディレクトリが長すぎる場合は始めたいです...終わり

たとえば、代わりに

otherstuff:~/apps/webs/2014/area1/groupa/current:other_stuff $ 

私は最初のディレクトリと最後の2つのディレクトリが欲しい。

otherstuff:~/apps/webs/.../groups/current:other_stuff $ 

部分的に重複する場合を処理する必要があります。

   otherstuff:~/apps/webs/2014:other_stuff $ 
-> otherstuff:~/apps/webs/2014:other_stuff $ 

同じ場合、つまり

   otherstuff:~/apps/webs/:other_stuff $ 
-> otherstuff:~/apps/webs/:other_stuff $ 

$ PWDは{}、()、{}を使用してさまざまな部分文字列を試しましたが、フォーマットを正しく取得できませんでした。

更新 - guidosの回答情報を使用してこれをクリーンアップしました(受け入れられました)。

parse_git_branch () {
  git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'
}
PS1='\033[01;31m\]\t\033[00m\]:'
PS1=$PS1'\[\033[01;32m\]\u\033[00m\]:\033[01;34m\]'
PS1=$PS1'`pwd | sed "s#\(/[^/]\+/[^/]\+/\).*\(/[^/]\+/[^/]\+\)/\?#\1...\2#g"`'
PS1=$PS1'\033[00m\]:\033[01;33m\]$(parse_git_branch)\[\033[00m\]\n\$ '

生産する:

ここに画像の説明を入力してください。

\033[00m\]:白いコロンの区切り記号3つに対して多くのコードが繰り返されることは残念です!

ベストアンサー1

このsedコマンドは、操作に役立つ正規表現を実行します。

 sed 's#\(/[^/]\+/[^/]\+/\).*\(/[^/]\+/[^/]\+\)/\?#\1...\2#g'

テスト:

PS1PWD_REGEX='s#\(/[^/]\+/[^/]\+/\).*\(/[^/]\+/[^/]\+\)/\?#\1...\2#g'
$ echo "~/apps/webs/2014/" | sed $PS1PWD_REGEX 
~/apps/webs/2014/
$ echo "~/apps/webs/chip/mips/2014/" | sed $PS1PWD_REGEX 
~/apps/webs/.../mips/2014
$ echo "~/apps/webs/chip/mips/2014" | sed $PS1PWD_REGEX 
~/apps/webs/.../mips/2014
$ echo "/apps/webs/chip/mips/clips/2014" | sed $PS1PWD_REGEX 
/apps/webs/.../clips/2014
$ echo "/" | sed $PS1PWD_REGEX 
/
$ echo "~" | sed $PS1PWD_REGEX
~

その後、次の行でプロファイルを設定できます。

export PS1='[\u@\h `pwd | sed "s#\(/[^/]\+/[^/]\+/\).*\(/[^/]\+/[^/]\+\)/\?#\1...\2#g"`]\$ '

私は個人的に、最初の行の長いパスに十分なスペースを提供する複数行のヒントを好みます。

おすすめ記事