Regex VIM填充适当数量的“、0”以获取CSV文件
我有一个包含如下数字的文件Regex VIM填充适当数量的“、0”以获取CSV文件,regex,csv,search,vim,substitution,Regex,Csv,Search,Vim,Substitution,我有一个包含如下数字的文件 1, 2, 3 4, 5 6, 7, 8, 9,10,11 12,13,14,15,16 ... 我想通过填充每一行来创建一个CSV文件,这样就有6个值被5个逗号分隔,所以我需要在每一行中添加一个适当的数字,0。它看起来应该像 1, 2, 3, 0, 0, 0 4, 5, 0, 0, 0, 0 6, 7, 8, 9,10,11 12,13,14,15,16, 0 ... 我该如何处理VIM 我可以用正则表达式计算一行中的数字,并用“替换”s命令将正确的
1, 2, 3
4, 5
6, 7, 8, 9,10,11
12,13,14,15,16
...
我想通过填充每一行来创建一个CSV文件,这样就有6个值被5个逗号分隔,所以我需要在每一行中添加一个适当的数字,0。它看起来应该像
1, 2, 3, 0, 0, 0
4, 5, 0, 0, 0, 0
6, 7, 8, 9,10,11
12,13,14,15,16, 0
...
我该如何处理VIM
我可以用正则表达式计算一行中的数字,并用“替换”s命令将正确的数字0添加到每行吗?您可以先在所有行中添加六个零,而不管它们有多少个数字,然后,您可以删除从第六个逗号到每行末尾的所有内容 要插入它们
:1,$ normal! i,0,0,0,0,0,0
从第六个逗号删除到结尾
:1,$normal! ^6f,D
^ moves to first character in line(which is obviously a number here)
6f, finds comma six times
D delete from cursor to end of line
例如:
原创的
1,2,
3,6,7,0,0,0
4,5,6
11,12,13
在加上六个零之后
1,2,0,0,0,0,0,0
3,6,7,0,0,0,0,0,0,0,0,0
4,5,6,0,0,0,0,0,0
11,12,13,0,0,0,0,0,0
从六个逗号移到行尾后
1,2,0,0,0,0,0
3,6,7,0,0,0,0
4,5,6,0,0,0,0
11,12,13,0,0,0
您可以先在所有行中添加六个零,而不管它们有多少个数字,然后,您可以删除从第六个逗号到每行末尾的所有内容 要插入它们
:1,$ normal! i,0,0,0,0,0,0
从第六个逗号删除到结尾
:1,$normal! ^6f,D
^ moves to first character in line(which is obviously a number here)
6f, finds comma six times
D delete from cursor to end of line
例如:
原创的
1,2,
3,6,7,0,0,0
4,5,6
11,12,13
在加上六个零之后
1,2,0,0,0,0,0,0
3,6,7,0,0,0,0,0,0,0,0,0
4,5,6,0,0,0,0,0,0
11,12,13,0,0,0,0,0,0
从六个逗号移到行尾后
1,2,0,0,0,0,0
3,6,7,0,0,0,0
4,5,6,0,0,0,0
11,12,13,0,0,0
您可以通过键入以下命令来实现:
:g/^/ s/^.*$/&,0,0,0,0,0,0/ | normal! 6f,D
您可以通过键入以下命令来实现:
:g/^/ s/^.*$/&,0,0,0,0,0,0/ | normal! 6f,D
使用perl:
使用awk:
使用perl:
使用awk:
至于如何从Vim内部执行此操作,您还可以通过外部程序传递文本,它将用输出替换输入。这是一种利用排序、重复数据消除、基于grep的过滤等或Sato的一些建议的简单方法。因此,如果您有一个名为standardize_commas.py的脚本,请尝试使用可视线模式shift+v选择块,然后选择,然后键入如下内容:!python/tmp/standarding_commas.py。它应该在该字符串前面加一点前缀,指示该命令将在当前选定的行上运行
仅供参考,这是我的/tmp/standarized_commas.py脚本:
import sys
max_width = 0
rows = []
for line in sys.stdin:
line = line.strip()
existing_vals = line.split(",")
rows.append(existing_vals)
max_width = max(max_width, len(existing_vals))
for row in rows:
zeros_needed = max_width - len(row)
full_values = row + ["0"] * zeros_needed
print ",".join(full_values)
至于如何从Vim内部执行此操作,您还可以通过外部程序传递文本,它将用输出替换输入。这是一种利用排序、重复数据消除、基于grep的过滤等或Sato的一些建议的简单方法。因此,如果您有一个名为standardize_commas.py的脚本,请尝试使用可视线模式shift+v选择块,然后选择,然后键入如下内容:!python/tmp/standarding_commas.py。它应该在该字符串前面加一点前缀,指示该命令将在当前选定的行上运行
仅供参考,这是我的/tmp/standarized_commas.py脚本:
import sys
max_width = 0
rows = []
for line in sys.stdin:
line = line.strip()
existing_vals = line.split(",")
rows.append(existing_vals)
max_width = max(max_width, len(existing_vals))
for row in rows:
zeros_needed = max_width - len(row)
full_values = row + ["0"] * zeros_needed
print ",".join(full_values)
可以使用选定的行号或标记,而不是1,$。这将是一种比使用复杂正则表达式更简单的方法。作为normal的一种快照形式,您可以使用normal。您可以使用选定的行号或标记,而不是1,$。这将是一种比使用复杂正则表达式更简单的方法。作为normal的一种快照形式,您可以使用normal。可以使用正则表达式并找到逗号的数量,然后在替换部分中使用expr部分,如/\=expr。但有几种方法比正则表达式(如宏或命令)更简单。利用vim。可以使用regex并找到逗号的数目,然后在替换部分中使用expr部分,比如/\=expr。但有几种方法比正则表达式(如宏或命令)更简单。利用vim。