![Cómo usar gnu sort para ordenar líneas con delimitador de campo presente solo en algunas líneas](https://rvso.com/image/52086/C%C3%B3mo%20usar%20gnu%20sort%20para%20ordenar%20l%C3%ADneas%20con%20delimitador%20de%20campo%20presente%20solo%20en%20algunas%20l%C3%ADneas.png)
En mi .vimrc enumero mis paquetes de vundle así:
cat ~/.vimrc
...
Bundle 'Raimondi/delimitMate'
Bundle 'kien/ctrlp.vim'
Bundle 'matchit.zip'
Bundle 'upAndDown'
Bundle 'rking/ag.vim'
...
Ahora, me gustaría ordenar rápidamente mi lista de paquetes por el nombre del paquete, lo que funciona para las líneas donde /
está presente, así:
cat ~/.vimrc | sort -t "/" -k2,2
...
Bundle 'matchit.zip'
Bundle 'upAndDown'
Bundle 'rking/ag.vim'
Bundle 'kien/ctrlp.vim'
Bundle 'Raimondi/delimitMate'
...
¿Cómo ordenaría las líneas donde no hay foo/
un prefijo al nombre del paquete, como es el caso, por ejemplo, de Bundle 'matchit.zip'
?
Respuesta1
Siempre puedes anteponer a ./
y luego eliminarlo nuevamente. P.ej:
sed "/\// ! s:^Bundle[[:space:]][[:space:]]*':&./:" ~/.vimrc |
sort -t "/" -k2,2 |
sed "s:\(^Bundle[[:space:]][[:space:]]*\)'\./:\1:"
O con GNU sed
, esto se puede acortar ligeramente con expresiones regulares extendidas:
sed -r "/\// ! s:^Bundle[[:space:]]+:&./:" ~/.vimrc |
sort -t "/" -k2,2 |
sed -r "s:(^Bundle[[:space:]]+)'\./:\1:"
O simplemente utilice un único espacio literal si está seguro de que el archivo es coherente.