This week I have to update a couple of yaml files and add a line in too many places. This is the chance to work smarter. So I searched how to add a line after a match and I found this link. So let’s use sed:
$ cat test.yaml
bgp:
bgp_as: 65000
enable: true
maximum_routes: 12000
neighbors:
- description: R1
route_map_in: RM-IN
- description: R2
route_map_in: RM-IN
$
$ sed '/route_map_in: RM-IN/a route_map_out: RM-OUT' test.yaml
bgp:
bgp_as: 65000
enable: true
maximum_routes: 12000
neighbors:
- description: R1
route_map_in: RM-IN
route_map_out: RM-OUT
- description: R2
route_map_in: RM-IN
route_map_out: RM-OUT
But the I needed to add some spaces to be aligned properly… So I searched again and found this. Now try again adding the spaces we need using “\ ” for each one.
go:1.14.6|py:3.7.3|tomas@athens:~$ sed '/route_map_in: RM-IN/a \ \ \ \ route_map_out: RM-OUT' test.yaml
bgp:
bgp_as: 65000
enable: true
maximum_routes: 12000
neighbors:
- description: R1
route_map_in: RM-IN
route_map_out: RM-OUT
- description: R2
route_map_in: RM-IN
route_map_out: RM-OUT
So now redirect to a new file to fully check and then you can rename:
$ sed '/route_map_in: RM-IN/a \ \ \ \ route_map_out: RM-OUT' test.yaml > test.yaml.new
$ cat test.yaml.new
$ mv test.yaml.new test.yaml
Now it is perfect aligned. It is kernel hack, but I am happy enough and saved a lot of time copy/paste and errors for sure.