微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

正则表达式 – Bash脚本 – 批量修改文件sed正则表达式

我有一组.csv文件(全部在一个文件夹中),格式如下所示:

170;151;104;137;190;125;170;108
195;192;164;195;171;121;133;104
... (a lot more rows) ...

事情是我搞砸了一下,看起来应该是这样的

170;151;104.137;190.125;170;108
195;192;164.195;171.121;133;104

如果差异太微妙而无法注意到:

我需要编写一个脚本,将每隔三和五分号更改为该文件夹中efery文件中每一行的句点.

我的研究表明,我必须在我的脚本中设计一些聪明的sed s / command.问题是我对正则表达式不是很好.从阅读教程开始,它可能会涉及/ 3和/ 5.

解决方法

这是一个非常简短的方法

sed 's/;/./3;s/;/./4' -iBAK *

它取代了第3个,然后是第5个(现在是第4个)实例;与……

我在你的样本上测试了它(保存为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

为了安全起见,我已将我的示例备份为< WHATEVER> .BAK.要防止这种情况,请将-iBAK更改为-i.

这个脚本可能不是完全可移植的,但我已经在Mac 10.8上使用BSD sed(不知道什么版本)和Linux与sed(gsed)4.1.4(2003)进行了测试. @JonathanLeffler指出它是截至2008年的标准POSIX sed.我也发现它并喜欢它.

高尔夫提示:如果你从bash运行命令,你可以使用大括号扩展来实现一个非常短的版本:

sed -es/\;/./{3,4} -i *

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐