GNU/Linux >> Znalost Linux >  >> Linux

sed:jak nahradit řádek, pokud byl nalezen, nebo připojit na konec souboru, pokud nebyl nalezen?

S sed je to vlastně docela jednoduché :pokud se řádek shoduje, zkopírujte jej do h starý prostor, pak s nahradit hodnotu.
Na la$ t řádek ex změňte přidržovací prostor a vzorový prostor a poté zkontrolujte, zda není prázdný. Pokud není prázdný, znamená to, že substituce již byla provedena, takže není co dělat. Pokud je prázdný, znamená to, že nebyla nalezena žádná shoda, proto nahraďte prostor vzoru požadovanou proměnnou=hodnota poté připojte k aktuálnímu řádku v zadržovací vyrovnávací paměti. Nakonec ex znovu změnit:

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

Výše uvedené je gnu sed syntax. Přenosné:

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

To se asi dá zkrátit. Není to jediný příkaz sed a také používá grep, ale zdá se, že je to v podstatě to, co chcete. Je to jeden řádek a upravuje soubor na místě (žádné dočasné soubory).

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

Zde je jednodušší sed přístup, protože nenacházím sed hold space snadné pracovat. Pokud vám vyhovuje hold space , použití přístupu don_crissti poskytuje další příležitost zachovat cokoli ze stávající linie, ale to je obvykle velmi vzácné.

V tomto přístupu pouze vytisknete všechny řádky kromě řádku, který chcete vypustit, a na konci připojíte náhradu.

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

Linux
  1. sed:příkaz nenalezen

  2. Jak nahradit text podobný sedu pythonem?

  3. Jak nahradit řetězec ve více souborech v příkazovém řádku linuxu

  1. Jak použít sed k nahrazení proměnné konfiguračního souboru?

  2. bash skript připojí text k prvnímu řádku souboru

  3. Jak nahradit soubor v jar příkazovým řádkem v linuxu?

  1. Jak přidat text na konec souboru v Linuxu

  2. Jak nahradit řetězec v souboru (souborech)?

  3. Jak připojit řádek do zazipovaného souboru bez rozbalení?