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.
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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With