Sono un principiante di Linux relativo. Supponiamo di avere un file di testo a.txt che contiene il seguente testo:
A
B
C
 Ora, se voglio cambiare il testo sulla riga 2 (che contiene B ), posso usare il seguente sed comando:
sed -i '2s/^.*$/X/' a.txt
 per cambiare la B a X , per esempio.
 Ma ora supponiamo che io voglia scrivere un sed comando che cambia il testo della riga 2 in qualcosa che include una variabile stringa bash. Voglio cambiare il testo della riga 2 in fname="myaddress" , dove le virgolette sono incluse in modo esplicito e dove myaddress è una variabile stringa bash  (definito altrove). Per provare a farlo, ho creato uno script di shell bash chiamato mytest.sh e contenente quanto segue:
#!/bin/bash
myaddress="/home/"
echo fname="$myaddress"
head a.txt
sed -i '2s/^.*$/fname="$myaddress"/' a.txt
head a.txt
 Ora, echo fname="$myaddress" stampa fname="/home/" , che è il testo che voglio essere sulla riga 2 di a.txt . Tuttavia, sed invece stampa fname="$myaddress" alla riga 2 di a.txt , probabilmente perché si trova all'interno degli apostrofi circostanti. In altre parole, l'output dello script della shell bash sopra è:
fname="/home/"
A
B
C
A
fname="$myaddress"
C
 La mia domanda è:come posso ottenere sed per stampare effettivamente il valore memorizzato in myaddress e referenziato da $myaddress ?
Risposta accettata:
 Ci sono due problemi:primo, come già notato da Kevin, le variabili della shell devono essere racchiuse tra virgolette se devono essere espanse dalla shell. In secondo luogo, la tua stringa sostitutiva contiene un / , quindi non puoi usare / allo stesso tempo come delimitatore per sed . Se conosci quel qualche carattere, dì , , sicuramente non si verificherà nella stringa di sostituzione, puoi usare quel carattere come sed delimitatore, quindi ottieni
sed -i '2s,^.*$,fname="'"$myaddress"'",' a.txt