我试图在同一行中重复匹配的模式 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,
请注意,我将 each 替换Constant
为Parent
's name。
我认为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
使用一些解释的命令,我们将不胜感激。
Ased
基于您评论中的代码:
sed -E ':a;s/(Parent:([^,]*).*)Constant:/\1\2: /;t a' file
t
用于“测试”。如果前一个s///
成功,它会转到指定的标签,或到脚本的末尾。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句