gpt4 book ai didi

Sed - 如何匹配一个正则表达式组并用它来替换同一行中所有其他匹配的事件?

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

我试图在同一行中重复匹配模式 n 次,具体取决于另一个匹配项(常量)。

输入

Parent:X 4541, SomeData, Constant:Child: Variable1, SomeData, Constant:Child: Variable2, SomeData, Constant:Child: Variable3, SomeData, 
Parent:Y 2131, SomeData, Constant:Child: Variable4, SomeData, Constant:Child: Variable5, SomeData, Constant:Child: Variable6, SomeData,
Parent:Z 51 F, SomeData, Constant:Child: Variable7, SomeData, Constant:Child: Variable8, SomeData, Constant:Child: Variable9, SomeData,

预期输出

Parent:X 4541, SomeData, X 4541: Child: Variable1, SomeData, X 4541: Child: Variable2, SomeData, X 4541: Child: Variable3, SomeData, 
Parent:Y 2131, SomeData, Y 2131: Child: Variable4, SomeData, Y 2131: Child: Variable5, SomeData, Y 2131: Child: Variable6, SomeData,
Parent:Z 51 F, SomeData, Z 51 F: Child: Variable7, SomeData, Z 51 F: Child: Variable8, SomeData, Z 51 F: Child: Variable9, SomeData,

请注意,我用 Parent 的名称替换了每个 Constant

我认为 sed 保留空间可能是答案,但老实说我做不到。

如果它有助于解决问题,我可以在每个 Constant 之前先换行:

Parent:X 4541, SomeData, 
Constant:Child: Variable1, SomeData,
Constant:Child: Variable2, SomeData,
Constant:Child: Variable3, SomeData,
Parent:Y 2131, SomeData,
Constant:Child: Variable4, SomeData,
Constant:Child: Variable5, SomeData,
Constant:Child: Variable6, SomeData,
Parent:Z 51 F, SomeData,
Constant:Child: Variable7, SomeData,
Constant:Child: Variable8, SomeData,
Constant:Child: Variable9, SomeData,

如果输出不在同一行也没关系:

Parent:X 4541, SomeData, 
X 4541: Child: Variable1, SomeData,
X 4541: Child: Variable2, SomeData,
X 4541: Child: Variable3, SomeData,
Parent:Y 2131, SomeData,
Y 2131: Child: Variable4, SomeData,
Y 2131: Child: Variable5, SomeData,
Y 2131: Child: Variable6, SomeData,
Parent:Z 51 F, SomeData,
Z 51 F: Child: Variable7, SomeData,
Z 51 F: Child: Variable8, SomeData,
Z 51 F: Child: Variable9, SomeData,

努力:

这将正确地将最后一个 Constant 替换为换行符后跟 parent 的名称,但我必须多次重复命令直到没有左匹配(不实用)。

Sed -r -i "s#Parent:([^,]*)(.*)Constant:#\1\2\n\1: #" file

使用 awk 很好,但如果有人可以帮助使用 sed 命令并提供一些解释,我们将不胜感激。

最佳答案

基于您评论中的代码的 sed:

sed -E ':a;s/(Parent:([^,]*).*)Constant:/\1\2: /;t a' file

t 代表“测试”。如果之前的 s/// 成功,它会转到指定的标签,或脚本的末尾。

关于Sed - 如何匹配一个正则表达式组并用它来替换同一行中所有其他匹配的事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68205225/

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