Hvordan erstatte en streng i en fil i bash

Hvordan erstatte en streng i en fil i bash

Som programmerer kan det hende du må jobbe med forskjellige typer filer for å lagre data midlertidig eller permanent. Noen ganger kan det hende du må erstatte en del av filen eller endre det aktuelle innholdet i filen. For å erstatte innhold i en fil, må du søke etter den aktuelle filstrengen. De 'Sed' Kommando brukes til å erstatte en hvilken som helst streng i en fil ved hjelp av et bash -skript. Denne kommandoen kan brukes på forskjellige måter for å erstatte innholdet i en fil i bash. De 'Awk'Kommando kan også brukes til å erstatte strengen i en fil. Denne opplæringen viser deg hvordan du erstatter en hvilken som helst strengverdi fra en fil ved hjelp av et bash -skript.

01. Generell syntaks for sed
02. Erstatt streng i fil med bash sed -skript
03. sed g og jeg kommandoer for global og sak ufølsom
04. sed siffer matching
05. Generell syntaks for awk
06. Erstatt streng i fil med bash awk -skript
07. Erstatt streng i filen med ren bashskripting
08. Bytt ut streng i filen med Perl en foring

Eksempler på data for erstatning for bashstreng

En tekstfil som heter Salg.tekst Med følgende innhold opprettes for å vise erstatningsoperasjonene.
Salg.tekst

Dato beløpsområde
01/01/2020 60000 Dhaka
10/02/2020 76000 Rajshahi
21/03/2020 54000 Khulna
15/04/2020 78000 Chandpur
17/05/2020 45000 Bogra
02/06/2020 67000 Comilla

Generell syntaks for SED: Erstatt streng i en fil

Den grunnleggende syntaksen til 'sed'Kommando for å erstatte den aktuelle strengen i en fil er gitt nedenfor.

Syntaks

sed -i 's/search_string/erstatt_string/' filnavn

Hver del av syntaks ovenfor er forklart nedenfor.

'-Jeg' Alternativet brukes til å endre innholdet i den opprinnelige filen med erstatningsstrengen hvis søkestrengen finnes i filen.
'S' Angir erstatningskommandoen.
'Search_string' Inneholder strengverdien som vil bli søkt i filen for erstatning.
'erstatte_string' Inneholder strengverdien som vil bli brukt til å erstatte innholdet i filen som samsvarer med 'Search_string' verdi.
'filnavn' Inneholder filnavnet der søket og erstattet blir brukt.

Eksempel 1: Erstatt fil med 'Sed' -kommandoen

I det følgende skriptet vil den søk-og-erstatte teksten bli hentet fra brukeren. Hvis søkestrengen eksisterer i 'salg.txt ', så blir den erstattet av erstatningsstrengen. Her vil det bli utført et saksfølsomt søk.

#!/bin/bash
# Tildel filnavnet
filnavn = "Salg.tekst"
# Ta søkestrengen
Les -P "Skriv inn søkestrengen:" Søk
# Ta erstatningsstrengen
Les -P "Skriv inn erstatningsstrengen:" Erstatt
Hvis [[$ Search != "" && $ erstatt != ""]]; deretter
sed -i "s/$ search/$ erstatning/" $ filnavn
fi

Produksjon:

Eksempel 2: Erstatt fil med 'Sed' -kommandoen med 'G' og 'I' Flag

Følgende skript fungerer som forrige eksempel, men søkestrengen vil bli søkt globalt etter 'G' -flagget, og det case-ufølsomme søket vil bli gjort for 'I' -flagget.

#!/bin/bash
# Ta søkestrengen
Les -P "Skriv inn søkestrengen:" Søk
# Ta erstatningsstrengen
Les -P "Skriv inn erstatningsstrengen:" Erstatt
Hvis [[$ Search != "" && $ erstatt != ""]]; deretter
sed -i "s/$ search/$ erstatning/gi" $ 1
fi

Produksjon:

Eksempel 3: Erstatt fil med 'sed' kommando og matchende siffermønster

Følgende skript vil søke etter alt numerisk innhold i en fil og vil erstatte innholdet ved å legge til '$' symbol i begynnelsen av tallene.

#!/bin/bash
# Kontroller kommandolinjens argumentverdi eksisterer eller ikke
Hvis [$ 1 != ""]; deretter
# Søk i all streng som inneholder sifre og legg til $
sed -i 's/\ b [0-9] \ 5 \ \ b/$ &/g' $ 1
fi

Produksjon:

Erstatt streng i en fil med 'awk' -kommando

'awk ' Kommando er en annen måte å erstatte strengen i en fil, men denne kommandoen kan ikke oppdatere den opprinnelige filen direkte som 'sed ' kommando.

Eksempel 4: Erstatt fil med 'AWK' -kommando

Følgende skript lagrer det oppdaterte innholdet i temp.tekst fil som vil bli omdøpt av den opprinnelige filen.

#!/bin/bash
# Kontroller kommandolinjens argumentverdi eksisterer eller ikke
Hvis [$ 1 != ""]; deretter
# Søk i all streng basert på dato
awk 'sub ("02/06/2020", "12/06/2020") print' $ 1> temp.txt && mv temp.TXT $ 1
fi

Produksjon:


I eksemplet ovenfor brukes 'awk' -kommando til å søke etter en streng “02/06/2020”, som er den siste datoen i vår prøvefil. Den matchede strengen blir erstattet av en ny streng “12/06/2020”. Strengen som resulterer i om det erstattes eller ikke skrives ut på hver linje.

Eksempel 5: Erstatt streng i filen med ren bashskripting

I dette eksemplet vil vi gjøre den samme jobben med en bash mens Loop og en Bash String erstatningskommando. Vi vil skrive utgangen til en tmp fil og erstatt originalen på slutten av skriptet. Se koden nedenfor:

#!/bin/bash
mens du leser linjen; gjøre
# Bytt ut alle forekomster på linje med Khulna med Dhaka
ekko $ linje // khulna/dhaka
Ferdig < Sales.txt > /TMP/Salg.o.tekst
MV /TMP /Salg.o.txt salg.tekst

Du kan se at Echo -kommandoen vil gjøre en erstatning i linjevariabelen, ettersom skriptet leser hver linje i tekstfilen, og erstatte alle forekomster av Khulna med den nye strengen Dhaka. Mens sløyfen leser fra inndatafilen Salg.tekst og skriver til utdatafilen /TMP/Salg.o.tekst. Endelig erstatter den midlertidige utgangsfilen den opprinnelige filen med mv kommando.

Produksjon:

Eksempel 6: Erstatt streng i filen med Perl One Liner

Denne oppgaven er faktisk super enkel med Perl. Perl er et gammelt, mindre populært språk, men ekstremt kraftig. Dette kan gjøres med en linjekommando i base -kommandolinjen:

perl -pi.Bak -e 'S/Dhaka/Bogra/G' Salg.tekst

-pi.Bak ber Perl om å behandle filen på plass og også opprette en sikkerhetskopifil med .bakforlengelse. Erstatningen vil være alle tilfeller av Dhaka til Bogra Som den nye teksten. Her kan du se den enkle utgangen fra denne kommandoen:

PRODUKSJON:

Konklusjon

Denne artikkelen viste deg hvordan du bruker bashskript for å erstatte strenger i en fil med søk og erstatte på kommandolinjen i bash. Det er mange måter å gjøre dette på, inkludert med kommandoer SED, AWK, Perl; Du kan bruke Native Bash Scripting med løkker og regex, og det er flere måter selv ikke diskutert her. Bash og Linux har mange måter å gjøre den samme jobben.