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}'