在匹配模式后使用 sed 附加新行时添加换行符时出现问题

在匹配模式后使用 sed 附加新行时添加换行符时出现问题

我使用下面的命令来搜索模式 (Rel_Tag_St_bit),然后在文件中附加以下行:

sed -i -e '/Rel_Tag_St_bit/a\'$'\n''\ methods.mavenWithGoals("mvn so:s -f abc/pom.xml")' file

添加此行后,我需要有换行符,因为我看到在同一行上新添加的行之后附加了下一行。

输入示例:

Line1 (pattern match)managedScripts.Rel_Tag_St_bit("${env.templo_directory}/version.txt")
Line 2 (append ) methods.mavenWithGoals("mvn so:s -f abc/pom.xml") methods.mavenWithGoals("deploy -DaltDeploymentRepository=)
Line 3 (appears on second line itself) 

因此,这里的第三行 [methods.mavenWithGoals("deploy -DaltDeploymentRepository=)] 出现在第二个附加行上。

示例输出:

1)managedScripts.Rel_Tag_St_bit("${env.templo_directory}/version.txt")
2)methods.mavenWithGoals("mvn so:s -f abc/pom.xml")
3)methods.mavenWithGoals("deploy -DaltDeploymentRepository=) 

答案1

假设您的原始文件包含:

$ cat file
managedScripts.Rel_Tag_St_bit("${env.templo_directory}/version.txt")
methods.mavenWithGoals("deploy -DaltDeploymentRepository=)

您可以使用以下方法修改它:

$ sed -e '/Rel_Tag_St_bit/a\'$'\nmethods.mavenWithGoals("mvn so:s -f abc/pom.xml")\n' file
managedScripts.Rel_Tag_St_bit("${env.templo_directory}/version.txt")
methods.mavenWithGoals("mvn so:s -f abc/pom.xml")
methods.mavenWithGoals("deploy -DaltDeploymentRepository=)

即使用 shell(bash、ksh、zsh)C 字符串$'...'引入换行符。

答案2

$ sed -i -e '/Rel_Tag_St_bit/G;s/\n/&methods.mavenWithGoals("mvn so:s -f abc/pom.xml")/' file

G在这里,您在所需行的末尾附加一个换行符/Rel_Tag_St_bit/,然后将所需的文本粘贴到刚刚使用该命令添加的换行符后面G。由于换行符是有条件添加的,因此该s///命令不会触发不感兴趣的行,并sed让它们按原样传递。

相关内容