Reputation: 55
I have a list of IP addresses like that:
208.69.112.145
54.230.228.48
104.21.75.86/31
104.16.139.76
172.67.210.123
104.21.54.226/31
45.146.81.248/31
205.251.219.56/30
It needs to be converted to this format:
route 208.69.112.145/32 reject;
route 54.230.228.48/32 reject;
route 104.21.75.86/31 reject;
route 104.16.139.76/32 reject;
route 172.67.210.123/32 reject;
route 104.21.54.226/31 reject;
route 45.146.81.248/31 reject;
route 205.251.219.56/30 reject;
So every address should start with route
and end with reject;
Except for the lines that don't have a subnet mask, for those lines /32 reject;
should be added instead.
This works, but it adds /32
to every line:
cat /ip.lst | sed 's_.*_route &/32 reject;_' > /ip.txt
Upvotes: 0
Views: 326
Reputation: 785481
You may use this sed
:
sed -E 's~^~route ~; s~\.[0-9]+$~&/32~; s~$~ reject;~' file
route 208.69.112.145/32 reject;
route 54.230.228.48/32 reject;
route 104.21.75.86/31 reject;
route 104.16.139.76/32 reject;
route 172.67.210.123/32 reject;
route 104.21.54.226/31 reject;
route 45.146.81.248/31 reject;
route 205.251.219.56/30 reject;
Or this awk
:
awk -F/ '{print "route", $0 (NF==2 ? "" : "/32"), "reject;"}' file
route 208.69.112.145/32 reject;
route 54.230.228.48/32 reject;
route 104.21.75.86/31 reject;
route 104.16.139.76/32 reject;
route 172.67.210.123/32 reject;
route 104.21.54.226/31 reject;
route 45.146.81.248/31 reject;
route 205.251.219.56/30 reject;
Upvotes: 3
Reputation: 141493
Add 32
only if it's missing.
sed '\_/[0-9][0-9]_!s_$_/32_; s_.*_route & reject;_'
Hope you'll get the idea.
Upvotes: 3