regex - Vim - 对文件中的每一行数字进行排序?

标签 regex vim

我有一个如下所示的文件:

Pallets
24 1 345 232 345 1 432 45 0 3

some text
more text

COPIES
542 11,456 1,576 1,212 13,229 46,035 9,061 10,642 13,044
CHARGES
225.45 4,464.90 613.91 511.73 5,140.22 17,532.10 3,473.52 4,059.68 5,064.39

是否可以对数字列表的每一行进行排序?

所以像(我想象的):

如果匹配模式/^\d+/则对该行进行排序。

这可能吗?

编辑。这是输出。

Pallets
0 1 1 232 24 3 345 345 432 45 

some text
more text

COPIES
542 1,212 1,576 9,061 10,642 11,456 13,044 13,229 46,035 
CHARGES
225.45 511.73 613.91 3,473.52 4,059.68 4,464.90 5,064.39 5,140.22 17,532.10 

编辑。这是我到目前为止得到的内容(忽略逗号和小数部分)

%s/\n\(\d.*\)\n/\rSTART\r\1\rEND\r/
g/^\d/ s/ /\r/g
#Throwing away decimal for now..
g/^\d/ s/,\|\.\d\+//
g/START/+,/END/- sort
g/START/+,/END/- s/\n/ /
%s/ END$//
g/^START/d

最佳答案

您可以先将记录分成单独的行,对它们进行排序,然后重新连接:

:s/ /\r/g
:'[,']sort
:'[,']join

如果不使用空格作为分隔符,则必须使用:s重新连接:

:'[,']s/\n/,/

'[,'] 可以轻松地选择修改的范围(从行的初始分割开始),因此您不需要使用行号或人为地引入 BEGIN..END 防护.

关于regex - Vim - 对文件中的每一行数字进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25870715/

相关文章:

C++ boost::spirit 词法分析器正则表达式

Java Scanner.nextLine() 消耗换行符

VIM:在 enew 上执行自动命令

c - 与将 .c 文件转换为 .o 文件并链接和汇编相比,编译 gcc .c 文件有什么区别?

vim - 如何访问内置完成源?

vim - 用准备插入vi/vim的单词替换单词?

regex - (ab)+ 有什么区别?和 (ab)+ 当我在 boost :regex? 中使用它时

正则表达式匹配引号之间的字符串

C# 日期时间小时分钟验证

Vim Solarized 主题黑色空间