![Como usar o gnu sort para classificar linhas com delimitador de campo presente apenas em algumas linhas](https://rvso.com/image/52086/Como%20usar%20o%20gnu%20sort%20para%20classificar%20linhas%20com%20delimitador%20de%20campo%20presente%20apenas%20em%20algumas%20linhas.png)
No meu .vimrc listo meus pacotes vundle 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 dos pacotes, que funciona para linhas onde /
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 eu classificaria as linhas onde não há nenhum foo/
prefixo no nome do pacote, como é o caso, por exemplo, de Bundle 'matchit.zip'
?
Responder1
Você sempre pode acrescentar a ./
e removê-lo novamente. Por exemplo:
sed "/\// ! s:^Bundle[[:space:]][[:space:]]*':&./:" ~/.vimrc |
sort -t "/" -k2,2 |
sed "s:\(^Bundle[[:space:]][[:space:]]*\)'\./:\1:"
Ou com 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:]]+)'\./:\1:"
Ou apenas use um único espaço literal se tiver certeza de que o arquivo é consistente.