1

I'm trying to find a way to insert a new line after a specific empty line.
for example I have a file contains firewall rules, and I want to insert new lines after "# ok icmp code for FORWARD" and first empty line. (I don't know the exact line number and it is different in multiple machines):

... # ok icmp code for FORWARD -A ufw-before-forward -p icmp --icmp-type destination-unreachable -j ACCEPT -A ufw-before-forward -p icmp --icmp-type time-exceeded -j ACCEPT -A ufw-before-forward -p icmp --icmp-type parameter-problem -j ACCEPT -A ufw-before-forward -p icmp --icmp-type echo-request -j ACCEPT [Insert new lines here] # new lines comment new line 1 new line 2 ... 

here is my incomplete solution:
to find the specific line number:

cat file.rules | grep -n "ok icmp code for FORWARD" | cut -d':' -f 1 


to show the lines after specific line and before the empty line:

awk '!NF{f=0} /ok icmp code for FORWARD/ {f=1} f' file.rules 

1 Answer 1

1

Using ed to edit the file:

ed -s file.rules <<'EOF' /^# ok icmp code for FORWARD/;/^$/a # new lines comment new line 1 new line 2 . w EOF 

First sets the current line to the one matching # ok icmp code for FORWARD, then advances the current line to the first blank line following that, and appends text after it (A line with a single period marks the end of input), then writes the changed file back to disk.

Sign up to request clarification or add additional context in comments.

3 Comments

Thank you. Can I read a user input with this solution? I'm using 'read ip_network' in my script to receive the input from user and I want to call that in inserted line. ($ip_network). but it doesn't work in this case. this is the line had been inserted: -A ufw-before-forward -d $ipv4_network/24 -j ACCEPT
Sure; just use the version of a heredoc that does parameter expansion, and remember to escape the $ in the regex.
Thanks. I just removed quotes in 'EOF' and calling the variable worked.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.