gpt4 book ai didi

bash - 提取分隔符之间的所有事件,因为它们每行可以出现多个

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

我有一个文档 file.yaml,其中包含要替换的占位符之类的内容:

class: ##TOPIC##-area
name: myClass
type: Class
secretKey: private-##SECRET_KEY##

到目前为止,我已经使用 grep 获取占位符的值

grep -P '(?<=##).*(?=##)' file.yaml

然后,我有了这些值:

TOPIC
SECRET_KEY

现在,我们必须引入每行可以有多个占位符的新属性

class: ##TOPIC##-area
name: myClass
type: Class
secretKey: private-##SECRET_KEY##-encoded-##SUFFIX_CODE##

因此,grep 不再有效,因为输出变为:

TOPIC
SECRET_KEY##-encoded-##SUFFIX_CODE

但是,我想要拥有

TOPIC
SECRET_KEY
SUFFIX_CODE

我接受各种建议和想法来解决这个问题。谢谢

编辑:想法是只获取那些占位符,而不是替换它们。抱歉造成误会。

最佳答案

第一个解决方案: 使用 GNU awk,请尝试以下 awk 代码。简单的解释是,将 RS(记录分隔符)设置为 ## 直到下一次出现 # 后跟 2 次 ##。然后根据显示的输出示例,仅通过删除结果中不需要的 ## 来简单地打印匹配的行。

awk -v RS='##[^#]*##' 'RT{print substr(RT,3,length(RT)-4)}' Input_file


第二个解决方案: 使用任何 awk,请尝试以下程序。简单的解释就是,使用 awkmatch 函数来匹配正则表达式 /##[^#]*##/(在上面首先解释解决方案);在 while 循环中打印每行中找到的所有匹配项。

awk '{while(match($0,/##[^#]*##/)){print substr($0,RSTART+2,RLENGTH-4);$0=substr($0,RSTART+RLENGTH)}}' Input_file

关于bash - 提取分隔符之间的所有事件,因为它们每行可以出现多个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70500166/

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