GNU/Linux >> Linux Esercitazione >  >> Linux

Come posso utilizzare sed per modificare i miei file di configurazione, con chiavi e valori flessibili?

sed -i -e '/central\.database =/ s/= .*/= new_value/' /path/to/file

Spiegazione:

  • -i dice a sed di salvare i risultati nel file di input. Senza di esso, sed stamperà i risultati su stdout.
  • /central\.database =/ corrisponde alle righe che contengono la stringa tra le barre:central.database = . Il . è sfuggito poiché è un carattere speciale in regex.
  • Il s/OLD/NEW/ parte esegue un s sostituzione. La stringa OLD è un'espressione regolare da confrontare e il NEW part è la stringa in cui sostituire.
  • Nelle espressioni regolari, .* significa "corrisponde a qualsiasi cosa". Quindi = .* corrisponde a un segno di uguale, uno spazio e qualsiasi altra cosa successiva.

Ecco un esempio di espressione:

sed -i 's/^\(central\.database\s*=\s*\).*$/\1SQLTEST/' file.cfg

Se vuoi abbinare cose con / in esso puoi usare un altro delimitatore:

sed -i 's#^\(cent/ral\.data/base\s*=\s*\).*$#\1SQL/TEST#' file.cfg

O con espansione variabile:

VAL="SQLTEST"
sed -i "s/^\(central\.database\s*=\s*\).*\$/\1$VAL/" file.cfg

Nel tuo esempio:

sshRetValue=`sed -i "s/^\(\1$CENTRAL_DB_NAME\s*=\s*\).*\$/\1$CENTRAL_DB_VALUE/" /home/testing.txt`;

C'è un \1 prima di $CENTRAL_DB_NAME che non è valido. Inoltre, sed non stampa il suo valore di ritorno. Questo è il modo preferito per controllare i valori restituiti:

sed -i "s/^\($CENTRAL_DB_NAME\s*=\s*\).*\$/\1$CENTRAL_DB_VALUE/" /home/testing.txt;
sed_return_value=$?

E infine piping a ssh (non testato):

sed_return_value=$(ssh server <<EOF
    sed -i "s/^\($CENTRAL_DB_NAME\s*=\s*\).*\$/\1$CENTRAL_DB_VALUE/" /home/testing.txt;
    echo $?
EOF
)

-i serve per sostituire i dati nel file di input. Altrimenti sed scrive su stdout.

Le espressioni regolari sono un campo a sé stante. Sarebbe impossibile spiegarli in modo approfondito in una risposta di StackOverflow, a meno che non ci sia qualche funzione specifica che ti sfugge.


Linux
  1. Come trovare file di configurazione MySQL, PHP e Apache

  2. Come trovare file con autorizzazioni SUID e SGID in Linux

  3. Come comprimere file e directory su Linux (con esempi)

  4. Come spostare i file e visualizzare l'avanzamento (ad esempio con una barra di avanzamento)?

  5. Come modificare un file sul posto usando awk? (come con sed -i)

Come utilizzare il comando cp per copiare file e directory

Come utilizzare il comando gunzip di Linux con esempi

Come utilizzare il comando SED per trovare e sostituire la stringa nei file

Come installare e utilizzare Alpine con Gmail IMAP in Linux

Schemi di colori in Vim:come cambiarli e usarli

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