Ændring af forfattertypen i XML-fil med Unix Shell Script: En trin-for-trin guide

Hvordan kan forfattertypen i en XML-fil, der er placeret i /home/user/app/xmlfiles, ændres til 'Local' for tags inden for tags med attributten type='b' ved hjælp af en Unix shell script eller kommando?

Ændring af forfattertypen i en XML-fil ved hjælp af Unix Shell Script kan opnås med enten sed eller awk, hvor sed redigerer filen in-place, og awk bruger en midlertidig fil til at gemme ændringerne.

Ændring af forfattertypen i en XML-fil ved hjælp af Unix Shell Script

For at ændre forfattertypen i en XML-fil, der er placeret i /home/user/app/xmlfiles, til 'Local' for <author> tags inden for <fiction> tags med attributten type='b', kan du bruge en kombination af Unix shell kommandoer og sed eller awk. Her er en trin-for-trin guide:

Brug af sed

Du kan bruge sed til at foretage denne ændring. Følgende kommando vil gøre arbejdet:

sed -i '/]*type="b"[^>]*>/,/<\/fiction>/ s/[^<]*<\/author>/Local<\/author>/g' /home/user/app/xmlfiles/yourfile.xml

Forklaring:

  • -i: Redigerer filen in-place.
  • '/]*type="b"[^>]*>/,/<\/fiction>/ s/[^<]*<\/author>/Local<\/author>/g': Dette mønster søger inden for <fiction> tags med attributten type="b" og erstatter indholdet af <author> tags med 'Local'.
  • /home/user/app/xmlfiles/yourfile.xml: Stien til din XML-fil.

Brug af awk

Alternativt kan du bruge awk til at opnå det samme resultat:

awk 'BEGIN { FS=OFS="" } /]*type="b"[^>]*>/ { in_fiction=1 } in_fiction && /<\/fiction>/ { in_fiction=0 } in_fiction && // { sub(/[^<]*<\/author>/, "Local<\/author>") } { print }' /home/user/app/xmlfiles/yourfile.xml > /home/user/app/xmlfiles/temp.xml && mv /home/user/app/xmlfiles/temp.xml /home/user/app/xmlfiles/yourfile.xml

Forklaring:

  • BEGIN { FS=OFS="" }: Sætter feltseparatoren til ingenting, så hele linjen behandles som et enkelt felt.
  • in_fiction=1: Sætter en flag, når vi er inden for et <fiction> tag med type="b".
  • in_fiction && /<\/fiction>/ { in_fiction=0 }: Nulstiller flaget, når vi når slutningen af <fiction> tagget.
  • in_fiction && // { sub(/[^<]*<\/author>/, "Local<\/author>") }: Ændrer indholdet af <author> tagget til 'Local', hvis vi er inden for det relevante <fiction> tag.
  • { print }: Udskriver hver linje.
  • /home/user/app/xmlfiles/temp.xml: Midlertidig fil til at gemme ændringerne.
  • mv /home/user/app/xmlfiles/temp.xml /home/user/app/xmlfiles/yourfile.xml: Flytter den midlertidige fil til den oprindelige fil.

Begge metoder vil ændre forfattertypen til 'Local' for de relevante <author> tags i din XML-fil.