cant não funciona a partir do arquivo sh, mas funciona a partir da linha de comando

2

sed funciona na linha de comando, mas não funciona se colocar em um arquivo sh e executá-lo. Eu quero mudar um número em um arquivo existente e direcioná-lo para um novo arquivo, então eu tentei isso:

echo enter number 
read num
var1='more ods2.sql | egrep -e "test" | cut -c 5-7' 
sed "s/test$var1/test$num/g" ods2.sql > odstest.sql

Se eu executar essas instruções em um prompt, elas serão executadas com os resultados desejados. Substitui $var1 pela string que eu passei, por exemplo, 12345 :

sed "s/test$var1/test$num/g" ods2.sql > odstest.sql

Isso também funciona bem em um prompt:

more ods2.sql | egrep -e "test" | cut -c 5-7'

Por que não está funcionando se eu colocar isso em um script de shell?

    
por Pankaj Pradhan 04.06.2012 / 07:51

2 respostas

7

Esta linha

var1='more ods2.sql | egrep -e "test" | cut -c 5-7'

deve ser

var1='more ods2.sql | egrep -e "test" | cut -c 5-7'

i.e. você precisa usar backticks em vez de aspas simples (apóstrofos).

    
por 04.06.2012 / 08:43
0

more destina-se a funcionar em um terminal. Uma maneira mais simples é

var1=$(< ods2.sql grep "test" | cut -c 5-7)
sed "s/test$var1/test$num/g" ods2.sql > odstest.sql

Nit pick: tenha cuidado com a primeira linha, no entanto. Você está fazendo suposições sobre a posição e a extensão do texto que deseja extrair do ods2.sql. Eu não sei como é o var1 , mas aqui está um exemplo assumindo que é um número:

var1=$(< ods2.sql sed -n 's/test\([:digit:]*\)//p')
if ! [ -n "$var1" ]  # sed didn't find the pattern
    # complain, exit
fi
    
por 01.07.2014 / 02:30

Tags