perl - 替换 perl 中一行中第 n 次出现后的所有出现

标签 perl awk sed

我需要在 Unix 文件的每一行中第 n 次出现后替换所有出现的字符串。
我的文件数据:

:account_id:12345:6789:Melbourne:Aus
:account_id:98765:43210:Adelaide:Aus
我的输出数据:
:account_id:123456789MelbourneAus
:account_id:9876543210AdelaideAus
尝试使用 sed:sed 's/://3g' test.txt不幸的是,出现的 g 选项没有按预期工作。相反,它正在替换所有出现的情况。

最佳答案

使用 awk 的另一种方法

awk -v c=':' -v n=2 'BEGIN{
                       FS=OFS=""
                     }
                     {
                       j=0;
                       for(i=0; ++i<=NF;)
                         if($i==c && j++>=n)$i=""
                     }1' file 
$ cat file 
:account_id:12345:6789:Melbourne:Aus
:account_id:98765:43210:Adelaide:Aus

$ awk -v c=':' -v n=2 'BEGIN{FS=OFS=""}{j=0;for(i=0; ++i<=NF;)if($i==c && j++>=n)$i=""}1' file 
:account_id:123456789MelbourneAus
:account_id:9876543210AdelaideAus

关于perl - 替换 perl 中一行中第 n 次出现后的所有出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67983013/

相关文章:

perl - 在 Perl 中,如何检测是否在 5.9.4 之前的版本中加载了 bignum 支持?

linux - CSV 上的复杂 awk 循环

awk - 使用 sed(或 awk 或 tr)将换行符\n 替换为表达式

vim - Bash:如何生成具有序号的行?

javascript - 直接访问 Amazon S3 被拒绝

perl - 如何基于现有数组的一部分形成一个新数组

linux - 在 bash 中循环每个变量一次,而不是在第二个循环中每隔一个变量循环一次?

macos - 需要帮助将 sed 命令从 debian 移植到 OSX

c++ - 更改 C++ 类名的脚本

javascript - 是否有一种类似 JS 的语言允许对本地文件进行写 Access ?