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 № 1Inizialmente, 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:
- Virgolette singole attorno al testo che non devono essere espanse. (Rimuove la necessità di sfuggire ai caratteri speciali.)
- 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