Replace line after match

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.

Answers


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.


This is some shorter:

awk 'f{$0="999";f=0}/BBB/{f=1}1' file

f {$0="999";f=0} if f is true, set line to 999 and f to 0 /BBB/ {f=1} if pattern match set f to 1 1 print all lines, since 1 is always true.


$ awk '{print (f?999:$0); f=0} /BBB/{f=1}' file    
AAA
111
BBB
999
CCC
333

awk '/BBB/{print;getline;$0="999"}1' your_file

can use sed also, it's shorter

sed '/BBB/{n;s/.*/999/}'

sed 's/\(BBB\)/\1\
999/'

works on mac


Need Your Help

std::chrono: Set clock's epoch to 1/1/0000

c++ c++11 epoch chrono

Is it possible to manually set the epoch date/time to the January 1, 0000, so I might use the std::chrono::time_point::time_since_epoch to calculate the difference between a given date and January 1,