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

科克奥

我试图在同一行中重复匹配的模式 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 替换ConstantParent'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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用sed或其他工具将匹配项修改为正则表达式?

用 sed 或任何其他工具替换匹配的正则表达式的一部分

如何使用 sed 正则表达式模式匹配

正则表达式使用 sed 命令匹配和替换 yaml 文件中的文本

正则表达式匹配,但sed无法替换

如何将除正则表达式以外的所有内容与sed匹配?

正则表达式/ sed-如何匹配72个字符限制前一行中的最后一个空格字符

用 sed 替换正则表达式的第 N 个匹配项

sed正则表达式在配置中不匹配

使用sed匹配正则表达式

正则表达式未使用sed进行匹配

打印sed正则表达式的最后一个匹配项

sed 正则表达式匹配并替换任何最后一位数字

用sed替换匹配的正则表达式的一部分

sed - 在第一个正则表达式匹配后替换逗号

使用sed删除具有特定正则表达式的文件中的所有行

在bash中使用SED打印正则表达式匹配项

用SED中的正则表达式匹配并替换![foo](/ bar /)

使用sed将字符串匹配的正则表达式替换为通配符

从带有sed和bash中的正则表达式的字符串中提取匹配项

sed:如何在每一行中打印所有匹配项?

使用带有正则表达式的 sed 来替换字符串

SED-组合匹配的正则表达式行以创建一个csv文件

如何使用sed替换正则表达式捕获组?

sed - 如何在特定行上打印正则表达式匹配

用sed替换几个正则表达式组

如何使用sed或awk注释匹配正则表达式的多行

如何使用sed仅返回正则表达式匹配的第n次出现?

Sed正则表达式以匹配“”之间的内容