gpt4 book ai didi

regex - 按缩进模式处理文本文件

转载 作者:行者123 更新时间:2023-12-04 16:45:55 24 4
gpt4 key购买 nike

我尝试了 sed 与 s/regex/../的一些组合,但没有成功。所以这是我的问题:我有一个看起来像这样的文本文件(PCLint 输出)

--- Module A
Info: indented message 1
Note: indented message 2
Warning: indented message 3
--- Module B
--- Module C
Info: indented message 1
--- Module D

我想将结果更改为如下所示(teamcity 服务消息):

[Start Module="Module A"]
[Message Content="Info: indented message 1"]
[Message Content="Note: indented message 2"]
[Message Content="Warning: indented message 3"]
[End Module="Module A"]
[Start Module="Module B"]
[End Module="Module B"]
[Start Module="Module C"]
[Message Content="Info: indented message 1"]
[End Module="Module C"]
[Start Module="Module D"]
[End Module="Module D"]

所以我知道文本将以某种方式在每个“---”之间分成 block 。然后我应该使用正则表达式功能换行/替换文本 block 。但我不知道如何有效地做到这一点。理想情况下,我喜欢使用 busybox 中提供的工具,例如sed、awk 等,以保持工具“简单”(需要在 Win64 上工作)。

我可以很好地使用正则表达式,但我无法确定其范围。有什么提示给我吗?

最佳答案

awk 可以做到这一点。您需要一个与 /^---/ 匹配的子句,该子句设置一个变量来记录您所在的模块,并输出上一个模块的结束行(如果有)和开始下一行。然后是输出消息行的第二个子句。

$ cat input | awk '/^---/ { IFS=" "; oldM=M; M=$3; if (oldM) { print "[End Module=\"Module " oldM "\"]"; }; print "[Begin Module=\"Module " M "\"]"; } /^    (.*)$/ { gsub(/^ +/, "", $0); print "    [Message Content=\"" $0 "\"]"; } END { print "[End Module=\"Module " M "\"]"; }'
[Begin Module="Module A"]
[Message Content="Info: indented message 1"]
[Message Content="Note: indented message 2"]
[Message Content="Warning: indented message 3"]
[End Module="Module A"]
[Begin Module="Module B"]
[End Module="Module B"]
[Begin Module="Module C"]
[Message Content="Info: indented message 1"]
[End Module="Module C"]
[Begin Module="Module D"]
[End Module="Module D"]

关于regex - 按缩进模式处理文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30358955/

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