gpt4 book ai didi

bash - 在多个文件中将每第 4 次出现的 char "_"替换为 "@"

转载 作者:行者123 更新时间:2023-12-05 08:24:50 25 4
gpt4 key购买 nike

我正在尝试用 bash 将多个文件中每第 4 次出现的“_”替换为“@”。

例如

foo_foo_foo_foo_foo_foo_foo_foo_foo_foo.. 

会变成

foo_foo_foo_foo@foo_foo_foo_foo@foo_foo...

#perl -pe 's{_}{++$n % 4 ? $& : "@"}ge' *.txt

我已经尝试过 perl,但问题是它会每隔 4 次替换一次从最后一个文件开始的 _。因此,例如,某些文件的第一个 _ 被替换,因为它不是从 0 开始每个新文件,而是从前一个文件继续。

我试过:

#awk '{for(i=1; i<=NF; i++) if($i=="_") if(++count%4==0) $i="@"}1' *.txt 

但这也行不通。

使用 sed 我无法找到一种方法来继续替换每 4 次出现,因为每个文件中的 _ 数量不同。有些文件有 20 _,有些有 200 _。因此,我无法指定范围。

我真的不知道该怎么办,有人能帮忙吗?

最佳答案

您只需要使用 eof 重置 perl 中的计数器以告知它何时完成读取每个文件:

perl -pe 's{_}{++$n % 4 ? "_" : "@"}ge; $n = 0 if eof' *.txt

关于bash - 在多个文件中将每第 4 次出现的 char "_"替换为 "@",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70879403/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com