如何使用 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:"

或者,如果您确定文件是一致的,则仅使用单个文字空格。

相关内容