Como usar o gnu sort para ordenar linhas com o delimitador de campo presente apenas em algumas linhas

2

No meu .vimrc eu listo meus pacotes de vundus assim:

cat ~/.vimrc

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

Agora, gostaria de classificar rapidamente minha lista de pacotes pelo nome do pacote, que funciona para as linhas em que / está presente, assim:

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

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

Como classificaria linhas nas quais não há foo/ pré-anexado ao nome do pacote, como é o caso, por exemplo? para Bundle 'matchit.zip' ?

    
por jottr 27.03.2014 / 11:42

1 resposta

1

Você pode sempre preceder um ./ e, em seguida, removê-lo novamente. Por exemplo:

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

Ou com o GNU sed , isso pode ser ligeiramente reduzido com expressões regulares estendidas:

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

Ou use apenas um único espaço literal se tiver certeza de que o arquivo é consistente.

    
por 27.03.2014 / 11:55

Tags