linux – perl – 用另一个字符替换每个第n个(和多个)字符的出现
发布时间:2020-12-13 23:57:01 所属栏目:Linux 来源:网络整理
导读:有没有人知道任何unix命令/ perl脚本会插入特定字符(可以输入为十六进制(即7C)或实际字符(即|))在特定字符的第n次重复出现的位置. 即perl script.pl“,”3“|” data.txt中 将用管道替换每个第3,第6,第9 ……等逗号. 因此,如果在脚本运行之前data.txt具有以
有没有人知道任何unix命令/ perl脚本会插入特定字符(可以输入为十六进制(即7C)或实际字符(即|))在特定字符的第n次重复出现的位置.
即perl script.pl“,”3“|” data.txt中 将用管道替换每个第3,第6,第9 ……等逗号. 因此,如果在脚本运行之前data.txt具有以下内容: fd,3232,gfd67gf,peas,989767,jkdfnfgjhf,dhdhjsk,267,ujfdsy,fuyds,637296,ldosi,fduy,873,fuisouyd,try save,2837,ipoi 它应该在脚本运行后具有此功能: fd,gfd67gf| peas,jkdfnfgjhf| dhdhjsk,ujfdsy|fuyds,ldosi|fduy,fuisouyd|try save,ipoi 解决方法
小perl hack解决问题.使用索引函数查找逗号,模块替换正确的模块,使用substr执行替换.
use strict; use warnings; while (<>) { my $x=index($_,","); my $i = 0; while ($x != -1) { $i++; unless ($i % 3) { $_ = substr($_,$x) ."|". substr($_,$x+1); } $x = index($_,$x + 1) } print; } 使用perl script.pl file.csv运行. 注意:您可以在while(<>)循环之前放置声明my $i,以便进行全局计数,而不是每行的单独计数.我不太清楚我在这方面理解你的问题. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |