我需要在 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/