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).
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?
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).
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
Tags sed