GNU/Linux >> Linux Esercitazione >  >> Linux

sed:come sostituire la riga se trovata o aggiungere alla fine del file se non trovata?

In realtà è abbastanza semplice con sed :se una riga corrisponde basta copiarla nel h vecchio spazio poi s sostituire il valore.
Sulla$ t riga ex cambia lo spazio di attesa e lo spazio del motivo, quindi controlla se quest'ultimo è vuoto. Se non è vuoto, significa che la sostituzione è già stata effettuata quindi niente da fare. Se è vuoto, significa che non è stata trovata alcuna corrispondenza, quindi sostituisci lo spazio del modello con la variabile=valore desiderata quindi aggiungi alla riga corrente nel buffer di attesa. Infine, ex cambia di nuovo:

sed '/^FOOBAR=/{h;s/=.*/=newvalue/};${x;/^$/{s//FOOBAR=newvalue/;H};x}' infile

Quanto sopra è gnu sed sintassi. Portatile:

sed '/^FOOBAR=/{
h
s/=.*/=newvalue/
}
${
x
/^$/{
s//FOOBAR=newvalue/
H
}
x
}' infile

Questo può probabilmente essere accorciato. Non è un singolo comando sed e usa anche grep, ma questo sembra essere fondamentalmente quello che vuoi. È una singola riga e modifica il file sul posto (nessun file temporaneo).

grep -q "^FOOBAR=" file && sed "s/^FOOBAR=.*/FOOBAR=newvalue/" -i file || 
    sed "$ a\FOOBAR=newvalue" -i file

Ecco un sed più semplice approccio, poiché non trovo sed hold space facile da lavorare. Se sei a tuo agio con hold space , l'utilizzo dell'approccio don_crissti offre ulteriori opportunità di preservare qualsiasi cosa dalla linea esistente, ma di solito è molto raro.

In questo approccio, devi semplicemente stampare tutto tranne la riga che vuoi eliminare e poi, alla fine, aggiungere la sostituzione.

sed -n -e '/^FOOBAR=/!p' -e '$aFOOBAR=newvalue' infile

Linux
  1. Come aggiungere testo alla fine del file in Linux

  2. Come aggiungere facilmente testo alla fine del file in Linux

  3. Come sostituire una stringa in un file?

  4. Come inserire del testo prima della prima riga di un file?

  5. Come aggiungere più righe a un file?

Come leggere un file riga per riga in Bash

Come rimuovere le righe da un file usando il comando Sed

Tutorial Unix Sed:aggiungi, inserisci, sostituisci e conta righe di file

sed:comando non trovato

Come utilizzare Sed per trovare e sostituire una stringa in un file

Come inserisco il testo nella prima riga di un file usando sed?