/path/to/file を /p/t/file に短縮する方法

/path/to/file を /p/t/file に短縮する方法

awk各親/中間レベルの最初の文字を使用してUnixパスの文字列を短縮しますが、完全なデフォルト名を使用するエレガントな1行コード(たとえば)を探しています。たとえば、説明する方が簡単です。

  • /path/to/file/p/t/file
  • /tmp/tmp
  • /foo/bar/.config/wizard_magic/f/b/./wizard_magic
  • /foo/bar/.config/wizard_magic/f/b/.c/wizard_magic
    以下の@MichaelKjörlingと@ChrisHの良い点を考慮して、この例では、最初の文字がドットのときに最初の2文字を表示する方法を示します。

ベストアンサー1

sedでは非常に簡単です(ファイル名に改行がないとします)。

sed 's!\([^/]\)[^/]*/!\1/!g'

awkでは逆参照がないので簡単ではありません(Gawkは除くが構文はぎこちない)。

awk -v FS=/ -v OFS=/ '{for (i=1; i<NF; i++) $i=substr($i,1,1)} 1'

zshから(パスは$full_path):

echo "${(j:/:)${(@r:1:)${(@s:/:)${full_path:h}}}}/${full_path:t}"

おすすめ記事