![如何使用 gnu sort 對僅在某些行上存在字段分隔符號的行進行排序](https://rvso.com/image/52086/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20gnu%20sort%20%E5%B0%8D%E5%83%85%E5%9C%A8%E6%9F%90%E4%BA%9B%E8%A1%8C%E4%B8%8A%E5%AD%98%E5%9C%A8%E5%AD%97%E6%AE%B5%E5%88%86%E9%9A%94%E7%AC%A6%E8%99%9F%E7%9A%84%E8%A1%8C%E9%80%B2%E8%A1%8C%E6%8E%92%E5%BA%8F.png)
在我的 .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:"
或者,如果您確定檔案是一致的,則僅使用單一文字空格。