Confusão sobre sed e ''

6

O seguinte comando funciona bem:

sed s/input/raw_input/ p.py >p2.py && mv p2.py p.py

No entanto, o seguinte comando transforma o p.py em um arquivo vazio:

sed s/input/raw_input/ p.py >p.py

O seguinte também transforma o p.py em um arquivo vazio:

sed s/input/raw_input/ p.py | cat > p.py

Por que os dois últimos comandos não se comportam como esperado? Em particular, por que o p.py está vazio?

    
por math4tots 13.02.2012 / 06:04

1 resposta

11

Isso ocorre porque o operador de redirecionamento > é chamado antes de qualquer comando e, assim, o seguinte acontece nesta ordem:

  1. p.py está aberto para escrita, truncando o que estava lá antes
  2. sed é chamado para executar comandos em p.py , que agora está vazio
  3. A saída (que não é nada) é gravada em p.py (portanto, ela ainda não contém nada)

Você tem duas opções dependendo de quão portátil você quer que seu código seja:

não portátil

Use a opção GNU sed -i para fazer uma edição no local

portátil

redireciona a saída para um arquivo temporário e, em seguida, move o arquivo temporário sobre o original após a conclusão de sed

    
por 13.02.2012 / 06:08

Tags