sed -e 's/online=YES/online=NO/' -e t -e 's/online=NO/online=YES/'
O comando t
em sed
será ramificado para o rótulo fornecido (ou para o final do script sed
se nenhum rótulo for fornecido) se um comando anterior s
tiver feito uma substituição desde o mais recente leitura de uma linha de entrada.
Neste caso, ele ignorará a segunda substituição se a primeira substituição foi realizada.
Para o caso em que pode haver vários online=YES
ou online=NO
em linhas, use
sed -e 's/online=YES/online=MAYBE/g' \
-e 's/online=NO/online=YES/g' \
-e 's/online=MAYBE/online=NO/g'
em que a string MAYBE
não está associada ao padrão online=
. Isso seria semelhante em natureza de usar uma variável temporária para trocar os valores de duas variáveis.
Teste:
$ echo "online=YES online=YES online=NO online=YES" | sed -e 's/online=YES/online=MAYBE/g' -e 's/online=NO/online=YES/g' -e 's/online=MAYBE/online=NO/g'
online=NO online=NO online=YES online=NO
O motivo pelo qual o comando n
não funciona no lugar do comando t
no primeiro exemplo é que ele lerá a próxima linha de entrada na metade do script e executará a segunda metade do script nessa linha:
$ ( echo "online=YES"; echo "online=YES" ) | sed -e 's/online=YES/online=NO/' -e n -e 's/online=NO/online=YES/'
online=NO
online=YES
Você obterá a mesma saída para duas linhas NO
.