Bash:在特定位置的文件中插入一行

我正在写一个脚本,需要我在configuration文件的特定部分添加行。 例如

之前:

ServerActors=IpServer.UdpServerUplink MasterServerAddress=unreal.epicgames.com MasterServerPort=27900 ServerActors=IpServer.UdpServerUplink MasterServerAddress=master0.gamespy.com MasterServerPort=27900 ServerActors=IpServer.UdpServerUplink MasterServerAddress=master.mplayer.com MasterServerPort=27900 ServerActors=UWeb.WebServer 

后:

 ServerActors=IpServer.UdpServerUplink MasterServerAddress=unreal.epicgames.com MasterServerPort=27900 ServerActors=IpServer.UdpServerUplink MasterServerAddress=master0.gamespy.com MasterServerPort=27900 ServerActors=IpServer.UdpServerUplink MasterServerAddress=master.mplayer.com MasterServerPort=27900 ServerActors=IpServer.UdpServerUplink MasterServerAddress=master.qtracker.com MasterServerPort=27900 ServerActors=UWeb.WebServer 

正如你可以看到有一个新的线添加。 我的bash脚本如何插入行? 我猜我会需要使用sed。

Solutions Collecting From Web of "Bash:在特定位置的文件中插入一行"

如果你想在特定字符串匹配后添加一行:

 $ awk '/master.mplayer.com/ { print; print "new line"; next }1' foo.input serverActors=Ipserver.UdpserverUplink MasterserverAddress=unreal.epicgames.com MasterserverPort=27900 serverActors=Ipserver.UdpserverUplink MasterserverAddress=master0.gamespy.com MasterserverPort=27900 serverActors=Ipserver.UdpserverUplink MasterserverAddress=master.mplayer.com MasterserverPort=27900 new line serverActors=UWeb.Webserver 

你可以使用这样的东西:

请注意,该命令必须输入多行,因为sed不允许使用“\ n”或Ctrl-V / Ctrl-M组合键(如某些工具)对新行进行编码。 反斜线表示“忽略我的返回键,我还没有完成我的命令”。

 sed -i.bak '4i\ This is the new line\ ' filename 

这应该做的伎俩(它会插入行3和4之间)。

如果你想把这个命令本身放到一个shell脚本中,你必须避免反斜杠,这样它们不会被bash吃掉,也不会被传递给sed。 在脚本内部,命令变成:

 sed -i.bak '4i\\ This is the new line\\ ' filename 
 awk 'NR==5{print "new line text"}7' file 

你可以添加sed在你的文件的文件filename后,一定的字符串pattern匹配:

 sed '/pattern/a some text here' filename 

在你的例子

 sed '/master.mplayer.com/a \ new line' filename 

(反斜线掩盖了新行中的第一个空格,所以可以在开始时添加更多的空格)

来源: https : //unix.stackexchange.com/a/121166/20661