So verwenden Sie GNU Sort, um Zeilen zu sortieren, bei denen nur in einigen Zeilen ein Feldtrennzeichen vorhanden ist

So verwenden Sie GNU Sort, um Zeilen zu sortieren, bei denen nur in einigen Zeilen ein Feldtrennzeichen vorhanden ist

In meiner .vimrc liste ich meine Vundle-Pakete wie folgt auf:

cat ~/.vimrc

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

Nun möchte ich meine Bundle-Liste schnell nach dem Bundle-Namen sortieren. Das funktioniert für Zeilen, in denen /vorhanden ist, und zwar so:

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

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

Wie sortiere ich Zeilen, denen foo/dem Bundle-Namen kein vorangestellt ist, wie es beispielsweise bei der Fall ist Bundle 'matchit.zip'?

Antwort1

Du kannst immer ein „voranstellen“ ./und es dann wieder entfernen. Beispiel:

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

Oder bei GNU sedkann dies mit erweiterten regulären Ausdrücken etwas abgekürzt werden:

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

Oder verwenden Sie einfach ein einzelnes Leerzeichen, wenn Sie sicher sind, dass die Datei konsistent ist.

verwandte Informationen