Как использовать gnu sort для сортировки строк, если разделитель полей присутствует только в некоторых строках

Как использовать gnu sort для сортировки строк, если разделитель полей присутствует только в некоторых строках

В моем .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/префикса к имени пакета, как, например, в случае Bundle 'matchit.zip'?

решение1

Вы всегда можете добавить a ./, а затем снова удалить его. Например:

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:"

Или просто используйте один пробел, если вы уверены, что файл целостный.

Связанный контент