Usando uma variável dentro do comando 'sed'

6

Estou usando este comando para copiar determinada linha de um arquivo para outro. Ele está funcionando bem.Não importa com isso.

sed -f <(sed -e '1,10d; 12,$d; x; s/.*/10a\/;p; x' ../log/file2.txt ) ../log/file4.txt > ../log/file5.txt

O problema é, em vez de 10, eu quero usar a variável VAR1 (onde var1 = 10). O $ VAR1 não está funcionando.

Eu tentei este comando:

sed -f <(sed -e '1,$VAR1d; 12,$d; x; s/.*/10a\/;p; x' ../log/file2.txt ) ../log/file4.txt > ../log/file5.txt

Por favor me ajude.

    
por Mayur Sawant 30.09.2013 / 12:29

2 respostas

7

O shell não expande variáveis dentro de aspas simples. Você precisa usar aspas duplas. Além disso, como diz Danatela, você também precisa de chaves neste caso. Como o shell tentará expandir o $d também, você precisará escapar do $ .

sed -f <(sed -e "1,${VAR1}d; 12,$d; x; s/.*/10a\/;p; x" ../log/file2.txt ) ../log/file4.txt > ../log/file5.txt

Eu não tenho certeza se há outras partes nas citações que também precisarão de escape já que você usa aspas duplas agora (por exemplo, * ?), então você sempre pode alternar entre aspas duplas e simples, usando o antigo somente quando necessário.

sed -f <(sed -e '1,'"${VAR1}"'d; 12,$d; x; s/.*/10a\/;p; x' ../log/file2.txt ) ../log/file4.txt > ../log/file5.txt
    
por Sparhawk 30.09.2013 / 12:57
3

Você deve usar chaves ao redor do nome da variável:

sed -f <(sed -e '1,${VAR1}d; 12,$d; x; s/.*/10a/;p; x' ../log/file2.txt ) ../log/file4.txt > ../log/file5.txt

Assim, $ avaliará VAR1 em vez de VAR1d .

    
por Danatela 30.09.2013 / 12:38