GNU/Linux >> Linux Esercitazione >  >> Linux

Utilizzando un riferimento a una variabile di stringa Bash in Sed?

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

Linux
  1. Script Bash(I)

  2. Avvolgi il primo carattere di una stringa usando Sed?

  3. Usa Sed per aggiungere il carattere nell'ennesima posizione della stringa corrispondente?

  4. Sostituzione di stringhe usando un dizionario?

  5. Come scrivere più stringhe di righe usando Bash con variabili?

Variabile di esportazione Bash

Bash concatena le stringhe

Sostituzione di String in Bash

Bash Scripting – Manipolazione di stringhe

Bash Beginner Series #4:Utilizzo di array in Bash

Utilizzo del comando Bash printf per la stampa di output formattati