如何使用 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/預先新增到捆綁包名稱的行進行排序,例如 for 的情況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:"

或者,如果您確定檔案是一致的,則僅使用單一文字空格。

相關內容