我有一组.csv文件(全部在一个文件夹中),格式如下所示:
170;151;104;137;190;125;170;108
195;192;164;195;171;121;133;104
... (a lot more rows) ...
Run Code Online (Sandbox Code Playgroud)
事情是我搞砸了一下,看起来应该是这样的
170;151;104.137;190.125;170;108
195;192;164.195;171.121;133;104
Run Code Online (Sandbox Code Playgroud)
如果差异太微妙而无法注意到:
我需要编写一个脚本,将每隔三和五分号更改为该文件夹中efery文件中每一行的句点.
我的研究表明,我必须sed s/在我的脚本中设计一些聪明的命令.问题是我对正则表达式不是很好.从阅读教程开始,它可能会涉及/ 3和/ 5.
这是一个非常简短的方法:
sed 's/;/./3;s/;/./4' -iBAK *
Run Code Online (Sandbox Code Playgroud)
它将第三个和第五个(现在是第四个)实例替换;为.。
我在你的样本上测试了它(另存为sample.txt):
$ sed 's/;/./3;s/;/./4' <sample.txt
170;151;104.137;190.125;170;108
195;192;164.195;171.121;133;104
Run Code Online (Sandbox Code Playgroud)
为了安全起见,我已将我的示例备份为您的原件<WHATEVER>.BAK。为了防止这种情况,请更改-iBAK为-i.
该脚本可能不完全可移植,但我已经在 Mac 10.8 上使用 BSD sed(不知道是什么版本)和 Linux 上使用 sed (gsed) 4.1.4 (2003) 对其进行了测试。@JonathanLeffler 指出它是sed2008 年的标准 POSIX。我也刚刚发现它并且非常喜欢它。
高尔夫提示:如果您从 bash 运行命令,则可以使用大括号扩展来实现极短的版本:
sed -es/\;/./{3,4} -i *
Run Code Online (Sandbox Code Playgroud)