linux - perl - 用另一个字符替换每第 n 次(和多次)出现的字符

标签 linux perl shell unix command-line

有谁知道任何 unix 命令/perl 脚本会在第 n 次重复出现的位置插入特定字符(可以输入为十六进制(即 7C)或实际字符(即 |))具体的字符。 即 perl script.pl ","3 "|"数据.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,3232,gfd67gf|
peas,989767,jkdfnfgjhf|
dhdhjsk,267,ujfdsy|fuyds,637296,ldosi|fduy,
873,fuisouyd|try
save,2837,ipoi

最佳答案

解决问题的小 perl hack。使用 index查找逗号的函数,替换正确的模数,和substr执行替换。

use strict;
use warnings;

while (<>) {
    my $x=index($_,","); 
    my $i = 0; 
    while ($x != -1) {
        $i++; 
        unless ($i % 3) { 
            $_ = substr($_,0,$x) ."|". substr($_,$x+1); 
        }
        $x = index($_,",",$x + 1) 
    } 
    print;
}

perl script.pl file.csv 运行.

注意:可以把声明放在my $iwhile(<>) 之前循环以进行全局计数,而不是对每一行进行单独计数。不太确定我是否理解您在这方面的问题。

关于linux - perl - 用另一个字符替换每第 n 次(和多次)出现的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10153302/

相关文章:

perl - 如何开始为 CPAN 编写模块?

perl - 通过连接字符串和 int 将一个变量分配给另一个变量

javascript - 与 node.js 的 ssh 持久 session

python - Mac OS Catalina 中修复了 OS Mojave 中的 tkinter 8.6 系统崩溃错误吗?

shell - 在 Tex 文件中包含日期和时间

linux - busybox 初始化脚本。未找到挂载点

linux - 如何在 Linux 中配置仅发送邮件服务器,该服务器将为同一网络中的多个应用程序/Web 服务器接受并执行电子邮件传递

linux - 如何在 Linux 中创建回显设备?

html - 如何使用 Perl 在 HTML 的第 2 段和第 3 段之间插入内容?

c - Linux内核中进程的年龄