gpt4 book ai didi

shell - 用递增的值替换字符串

转载 作者:行者123 更新时间:2023-12-04 22:42:28 25 4
gpt4 key购买 nike

我有这个字符串:

"a | a | a | a | a | a | a | a"

我想用一个递增的值替换每个“|”,如下所示:
"a0a1a2a3a4a5a6a"

我知道我可以使用 gsub 来替换字符串:
> echo "a | a | a | a | a | a | a | a" | awk '{gsub(/\ \|\ /, ++i)}1'
a1a1a1a1a1a1a1a

但似乎 gsub 只在每个换行符之后递增,所以我现在的解决方案是首先在每个“|”之后放置一个换行符,然后使用 gsub 并再次删除换行符:
> echo "a | a | a | a | a | a | a | a" | awk '{gsub(/\ \|\ /, " | \n")}1' | awk '{gsub(/\ \|\ /, ++i)}1' | tr -d '\n'
a1a2a3a4a5a6a7a

老实说,这太恶心了……

有一个更好的方法吗?

最佳答案

perl没关系:

$ echo 'a | a | a | a | a | a | a | a' | perl -pe 's/ *\| */$i++/ge'
a0a1a2a3a4a5a6a
  • *\| *匹配 |被零个或多个空格包围
  • e修饰符允许在替换部分使用 Perl 代码
  • $i++ $i的使用值(value)并递增(默认值 0 )
  • 关于shell - 用递增的值替换字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42554684/

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