GNU/Linux >> Znalost Linux >  >> Linux

Jak mohu pomocí sed změnit své konfigurační soubory s flexibilními klíči a hodnotami?

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

Vysvětlení:

  • -i řekne sed, aby uložil výsledky do vstupního souboru. Bez něj sed vytiskne výsledky do stdout.
  • /central\.database =/ odpovídá řádkům, které obsahují řetězec mezi lomítky:central.database = . . je escapováno, protože jde o speciální znak v regulárním výrazu.
  • s/OLD/NEW/ část provede s substituce. Řetězec OLD je regulární výraz pro shodu a NEW část je řetězec, do kterého se má dosadit.
  • V regulárních výrazech .* znamená „shodovat se s čímkoli“. Takže = .* odpovídá rovnítko, mezeru a potom cokoli dalšího.

Zde je příklad výrazu:

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

Pokud chcete porovnat věci s / v něm můžete použít jiný oddělovač:

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

Nebo s variabilním rozšířením:

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

Ve vašem příkladu:

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

Před $CENTRAL_DB_NAME je \1 neplatný. Také sed nevytiskne svou návratovou hodnotu. Toto je preferovaný způsob kontroly návratových hodnot:

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

A nakonec připojení k ssh (netestováno):

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

-i slouží k nahrazení dat ve vstupním souboru. Jinak sed zapisuje do stdout.

Regulární výrazy jsou vlastní pole. Bylo by nemožné je do hloubky vysvětlit v odpovědi stackoverflow, pokud neexistuje nějaká konkrétní funkce, která vám uniká.


Linux
  1. Jak najít konfigurační soubory MySQL, PHP a Apache

  2. Jak používat Sed Command v Linuxu s příklady

  3. Jak najít velké soubory linux pomocí příkazů find a du

  1. Jak najít soubory s oprávněními SUID a SGID v Linuxu

  2. Jak přesunout soubory a zobrazit průběh (např. pomocí ukazatele průběhu)?

  3. Jak změnit soubor na místě pomocí awk? (jako u sed -i)

  1. Jak používat rsync k vyloučení souborů a adresářů v přenosu dat

  2. Jak komprimovat soubory a adresáře v systému Linux (s příklady)

  3. Jak změnit vlastnictví souborů a adresářů pomocí příkazu chown