gpt4 book ai didi

text - 用bash中的增量计数器替换两个字符串中包含的字符串

转载 作者:行者123 更新时间:2023-12-03 17:44:35 24 4
gpt4 key购买 nike

我正在尝试更改如下所示的文件:

>sample_A#Dakota
text
text
text
>text_2#Idao
text
text
text
>junk_1#Alabama
text
text
text
>example_4#Dakota
text
text
text
>example5#Honduras
text
text
text

到一个看起来像这样的文件:
>model_1#Dakota
text
text
text
>model_2#Idao
text
text
text
>model_3#Alabama
text
text
text
>model_4#Dakota
text
text
text
>model_5#Honduras
text
text
text

因此,我需要找到> 和# 之间的文本,并将其替换为“model”,后跟一个增量数字。我找到了一些单独做这些事情的答案,但我无法将它们结合起来。我想使用 bash,有一个像 sed 或 awk 这样的单行答案。
我试过这个:
awk 'BEGIN { cntr = 0 } />/,/#/ { cntr++ ; print "model", cntr } !/>/,/#/ { print $0 }' infile

但我得到了这个:
model 1
text
text
text
model 2
>text_2#Idao
text
text
text
model 3
>junk_1#Alabama
text
text
text
model 4
>example_4#Dakota
text
text
text
model 5
>example5#Honduras
text
text
text

提前致谢,

最佳答案

$ awk '/^>.*#/{sub(/^>[^#]+/, ">model_" ++c)} 1' ip.txt
>model_1#Dakota
text
text
text
>model_2#Idao
text
text
text
>model_3#Alabama
text
text
text
>model_4#Dakota
text
text
text
>model_5#Honduras
text
text
text
  • /^>.*#/如果行以 > 开头并有 #在行
  • sub功能有助于搜索和替换第一个匹配项
  • /^>[^#]+/匹配来自 > 的行首的字符直到之前 #人物
  • ">model_" ++c替换字符串
  • c将在开始时为零(因为这是数字上下文),++c将在递增后给出值,所以我们第一次得到 1 ,下次2等等
  • 关于text - 用bash中的增量计数器替换两个字符串中包含的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60915849/

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