![So verwenden Sie GNU Sort, um Zeilen zu sortieren, bei denen nur in einigen Zeilen ein Feldtrennzeichen vorhanden ist](https://rvso.com/image/52086/So%20verwenden%20Sie%20GNU%20Sort%2C%20um%20Zeilen%20zu%20sortieren%2C%20bei%20denen%20nur%20in%20einigen%20Zeilen%20ein%20Feldtrennzeichen%20vorhanden%20ist.png)
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 sed
kann 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.