Usando a opção -e com sed para executar sed de um script falhar

3

Meu comando sed funciona bem na linha de comando, mas quando eu o coloco em um script bash e o invoco com

sed -e sedscript.sh

Eu obtenho

$ sed -e sedscript.sh
sed: -e expression #1, char 12: unterminated 's' command

Este é o sedscript.sh:

$cat sedscript.sh
sed 's/^ *[0-9]\+.//g' tictactoeold.py>tictactoenew.py
    
por Don 27.09.2016 / 13:32

1 resposta

3

A opção -e de sed é inserir uma expressão válida sed , não um nome de arquivo contendo os comandos sed , o -f opção é para nome de arquivo contendo expressões sed válidas.

No seu caso:

sed -e sedscript.sh

está sendo trilhado como uma operação de substituição ( s ) de sed à medida que a expressão começa com s , com e como delimitador para s (substituição) e sed está reclamando corretamente sobre o comando s (substituição) não finalizado.

Divirta-se:

% sed -e sedscript.sheFOOe <<<'dscript.shBAR'
FOOBAR

O que você pode fazer:

  • Seu arquivo é necessariamente um script de shell, você pode simplesmente executá-lo como assim

  • Use -e para colocar a exposição na linha de comando diretamente, -e não é estritamente necessário:

     sed 's/^ *[0-9]\+.//g' tictactoeold.py >tictactoenew.py 
    
     sed -e 's/^ *[0-9]\+.//g' tictactoeold.py >tictactoenew.py 
    
  • Use a opção -f e mantenha apenas as expressões sed no arquivo, ou seja, crie o arquivo sedscript como:

    s/^ *[0-9]\+.//g
    

    e, em seguida, use o comando sed como:

    sed -f sedscript tictactoeold.py >tictactoenew.py
    
por heemayl 27.09.2016 / 13:58