Replace line after match

awk, bash, sed

Solution

This might work for you (GNU sed)

sed '/BBB/!b;n;c999' file

If a line contains `BBB`, print that line and then change the following line to `999`.

`!b` negates the previous address (regexp) and breaks out of any processing, ending the sed commands, `n` prints the current line and then reads the next into the pattern space, `c` changes the current line to the string following the command.

Problem

Given this file ``` $ cat foo.txt AAA 111 BBB 222 CCC 333 ``` I would like to replace the first line after `BBB` with `999`. I came up with this command ``` awk '/BBB/ {f=1; print; next} f {$1=999; f=0} 1' foo.txt ``` but I am curious to any shorter commands with either awk or sed.

Original source