Gnuソートを使用してフィールド区切り文字が一部の行にのみある行をソートする方法

Gnuソートを使用してフィールド区切り文字が一部の行にのみある行をソートする方法

私の.vimrcでは、次のようにvundleパッケージを一覧表示します。

cat ~/.vimrc

...
Bundle 'Raimondi/delimitMate'
Bundle 'kien/ctrlp.vim'
Bundle 'matchit.zip'
Bundle 'upAndDown'
Bundle 'rking/ag.vim'
...

では、バンドル名でバンドルリストをすばやくソートしたいと思います。これは/、次の既存の行に対して機能します。

cat ~/.vimrc | sort -t "/" -k2,2

...
Bundle 'matchit.zip'
Bundle 'upAndDown'
Bundle 'rking/ag.vim'
Bundle 'kien/ctrlp.vim'
Bundle 'Raimondi/delimitMate'
...

foo/forのように、バンドル名の前に追加されていない行を並べ替えるにはどうすればよいですかBundle 'matchit.zip'

ベストアンサー1

いつでも前に追加して./から再度削除できます。たとえば、

sed "/\// ! s:^Bundle[[:space:]][[:space:]]*':&./:" ~/.vimrc |
  sort -t "/" -k2,2 |
  sed "s:\(^Bundle[[:space:]][[:space:]]*\)'\./:\1:"

あるいは、GNUを使用すると、拡張sed正規表現を使用してわずかに短縮できます。

sed -r "/\// ! s:^Bundle[[:space:]]+:&./:" ~/.vimrc |
  sort -t "/" -k2,2 |
  sed -r "s:(^Bundle[[:space:]]+)'\./:\1:"

あるいは、ファイルが一貫性があると確信している場合は、単一のリテラルスペースを使用してください。

おすすめ記事