Algo como:
sed '/^[[:blank:]]*B$/{n;s/Hello/Hi/g;}'
Isso assume que não há B
s consecutivos (uma linha B
seguida por outra linha B
).
Caso contrário, você poderia fazer:
awk 'last ~ /^[[:blank:]]*B$/ {gsub("Hello", "Hi")}; {print; last=$0}'
O sed
equivalente seria:
sed 'x;/^[[:blank:]]*B$/{
g;s/Hello/Hi/;b
}
g'
Para substituir a segunda palavra após B
ou para substituir world
por universe
apenas se duas linhas acima contiverem B
:
awk 'l2 ~ /B/ {gsub("world","universe")}; {print; l2=l1; l1=$0}'
Para generalizar para n
linhas acima:
awk -v n=12 'l[NR%n] ~ /B/ {gsub("foo", "bar")}; {print; l[NR%n]=$0}'