Erstat og tilføj variabler i en inputfil med awk: En trin-for-trin guide

Er det muligt at erstatte en værdi for en enkelt variabel i en inputfil, der kun indeholder kommentarer og VARIABLE=value linjer, og ellers tilføje parret til slutningen af filen, hvis det ikke findes, ved hjælp af en enkelt sed kommando eller et andet værktøj som awk, uden at forstyrre linjeordenen?

Er det muligt at erstatte en værdi for en enkelt variabel i en inputfil og tilføje parret til slutningen af filen, hvis det ikke findes, ved hjælp af awk.

Er det muligt at erstatte en værdi for en enkelt variabel i en inputfil, der kun indeholder kommentarer og VARIABLE=value linjer, og ellers tilføje parret til slutningen af filen, hvis det ikke findes, ved hjælp af en enkelt sed kommando eller et andet værktøj som awk, uden at forstyrre linjeordenen?

Ja, det er muligt at erstatte en værdi for en enkelt variabel i en inputfil og tilføje parret til slutningen af filen, hvis det ikke findes, ved hjælp af awk. Her er en løsning, der bruger awk:

awk -v var="VARIABLE" -v val="new_value" '
BEGIN { found=0 }
{
    if ($0 ~ "^" var "=") {
        $0 = var "=" val
        found=1
    }
    print
}
END {
    if (found == 0) {
        print var "=" val
    }
}' inputfile > outputfile

Forklaring:

  • -v var="VARIABLE": Angiver variabelnavnet, der skal erstattes eller tilføjes.
  • -v val="new_value": Angiver den nye værdi for variablen.
  • BEGIN { found=0 }: Initialiserer en flag-variabel found til 0 i begyndelsen.
  • if ($0 ~ "^" var "="): Tjekker om linjen indeholder variablen i starten.
  • $0 = var "=" val: Erstatter linjen med den nye værdi, hvis variablen findes.
  • found=1: Sætter flaget found til 1, hvis variablen findes og erstattes.
  • print: Udskriver linjen.
  • END { if (found == 0) { print var "=" val } }: Tilføjer variablen og dens værdi til slutningen af filen, hvis den ikke blev fundet.

Dette script bevarer linjeordenen og sikrer, at variablen enten erstattes eller tilføjes til slutningen af filen, hvis den ikke findes.