/ / voglio usare la variabile nel comando sed -f nello script della shell - bash, shell, sed

Voglio usare la variabile nel comando sed -f nello script della shell - bash, shell, sed

Sto usando questo comando per copiare una determinata riga da un file all'altro. Funziona benissimo. Nessun problema.

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

Il problema è invece di 10, voglio usare la variabile VAR1 (dove var1 = 10). $ VAR1 non funziona.

Ho provato questo comando.

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

Mi aiuti per favore.

risposte:

3 per risposta № 1

Inizialmente, usa le virgolette doppie. Consentirà a BASH di elaborare la stringa.

Successivamente, sfuggire alle barre rovesciate (anche quelle che dovrebbero essere simboli di fuga per sed) - perché anche bash le sfuggirà.

Suppongo che dovrebbe essere

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

2 per risposta № 2

Prova doppi qoutes e parentesi graffe:

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

1 per risposta № 3

Preferisco un mix di virgolette singole e doppie:

  1. Virgolette singole attorno al testo che non devono essere espanse. (Rimuove la necessità di sfuggire ai caratteri speciali.)
  2. Virgolette doppie attorno al testo che devono essere espanse.

per esempio. Il tuo caso sarebbe simile a:

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