Como adicionar o caminho de arquivo a uma linha específica de um arquivo usando o script bash?

1

Eu tenho o seguinte código bash:

    echo "Enter an input path"
    read -e input_path

    OLDTEXT="\put(0,0){\includegraphics{/"
    NEWTEXT="\put(0,0){\includegraphics{$input_path/"

    find . -name "*.tex" -print0 | xargs -0  sed -i '$NEWTEXT' -e '$OLDTEXT'

A linha sed sempre produz um erro. Esta versão do código está produzindo a seguinte mensagem de erro:

sed: -e expressão # 1, char 2: comando desconhecido: 'O'

Ajuda?

    
por Bob 10.04.2015 / 22:06

2 respostas

0

Você precisa escapar das barras invertidas:

oldtext='[\]put(0,0){[\]includegraphics{/'
newtext="\\put(0,0){\\includegraphics{$input_path/"

Além disso, -i e -e não fazem o que você espera. Experimente:

sed "s|$oldtext|$newtext|" file

Se o texto acima indicar o que você deseja, use -i para alterar o arquivo:

find . -name '*.tex' -exec sed -i "s|$oldtext|$newtext|" {} \;

Com o GNU find ou um moderno BSD find , é mais eficiente usar:

find . -name '*.tex' -exec sed -i "s|$oldtext|$newtext|" {} +
    
por 10.04.2015 / 22:22
0

Isso não faz sentido: sed -i '$NEWTEXT' -e '$OLDTEXT' - mesmo se você estivesse usando corretamente aspas duplas para que as variáveis pudessem ser expandidas, os valores não são comandos sed válidos.

Suponho que você esteja tentando pesquisar e substituir:

sed -i "s#$OLDTEXT#$NEWTEXT#"
    
por 10.04.2015 / 22:22