Sed não funciona como esperado [duplicado]

0

Eu entendo sed

  1. Aplica todas instruções na linha 1 e, em seguida, na linha 2 ...
  2. As instruções anteriores podem alterar o espaço padrão , de modo que a próxima instrução funcionará nesse espaço de padrão modificado (em vez do texto original)

O exemplo é:

arquivo sample.txt

pig cow

Comando

sed -e 's/pig/cow/; s/cow/horse/;' sample.txt

Resultado esperado

horse horse

Saída Real

horse cow

O motivo da minha saída esperada é:

  1. Primeira instrução substituída porco por vaca no espaço padrão
  2. Segunda instrução substituiu 2 porco s por 2 cavalo s no espaço padrão
por Tran Triet 10.10.2018 / 08:18

1 resposta

2

O comando de substituição s , por padrão, apenas substituirá a correspondência primeiro , a menos que algum sinalizador seja usado após o delimitador final de substituição, como em

sed -e 's/pig/cow/g; s/cow/horse/g' <sample.txt

O sinal g informa sed para repetir a substituição quantas vezes for possível para qualquer correspondência não sobreposta da expressão regular.

Outro conjunto de sinalizadores para o comando s (não aplicável aqui, mas pode ser útil saber) é o sinalizador de dígito único, com o qual você pode optar por substituir a enésima coincidência do padrão, como em

sed -e 's/a/A/3'

O texto acima mudaria o terceiro a para um A em cada linha de entrada.

Consulte o manual de sed ( man sed ) no seu sistema para obter mais informações.

    
por 10.10.2018 / 08:34

Tags