Hvordan erstatte den siste forekomsten ved å bruke 'sed'

Hvordan erstatte den siste forekomsten ved å bruke 'sed'
'Sed' -kommando brukes i Linux for forskjellige typer tekstoperasjoner, for eksempel innsats, slett, erstatning osv. Ulike typer erstatningsoppgaver kan gjøres ved å bruke 'Sed' -kommandoen enkelt. Enhver erstatningsoppgave kan gjøres basert på søketeksten eller mønsteret. Den søkende teksten eller mønsteret kan forekomme flere ganger i strengen eller en fil der søket vil bli gjort. Hvordan du kan erstatte den siste forekomsten av den søkende teksten eller mønsteret er vist i denne opplæringen.

Bytt ut den siste forekomsten av teksten i en streng:

Denne delen viser hvordan den siste forekomsten av søkemønsteret i en streng kan erstattes ved å bruke 'Sed' -kommandoen.

Eksempel 1: Erstatt den siste forekomsten av et ord basert på mønster

Følgende 'sed' -kommando vil søke i ordet 'Php' i strengen og erstatt det søkeordet med ordet 'Angularjs' Hvis ordet eksisterer i strengen.

$ ECHO "Java PHP Bash Python JavaScript Perl PHP Laravel" |
sed 's/\ (.*\) Php/\ 1angularjs/'

Følgende utgang vises etter å ha kjørt kommandoen. Her, ordet 'Php' eksisterer to ganger i strengen, og den siste forekomsten er erstattet av ordet ' Angularjs'.

Eksempel-2: Erstatt den siste forekomsten av sifferbasert mønster

Følgende 'Sed' -kommando vil søke i ethvert siffer i strengen og erstatte det siste sifferet med nummeret 9.

$ ekko "Den første motverdien 2. Den andre motverdien 4 "|
sed 's/\ (.*\) [0-9])*/\ 19/'

Følgende utgang vises etter å ha kjørt kommandoen. Her vises sifferet to ganger i strengen, og det siste sifferet, 4, har blitt erstattet av nummeret 9.

Eksempel-3: Bytt ut det siste sifferet til et tall basert på mønster

Følgende 'Sed' -kommando vil erstatte det siste sifferet som finnes i strengverdien med verdien med dobbelt null (0 0).

$ ekko "Produktprisen er $ 500."| sed 's/\ (.*\) [0-9]/\ 100/'

Følgende utgang vises etter å ha kjørt kommandoen. Her, 500 eksisterer i strengverdien. Så i henhold til erstatningskommandoen, den siste null av 500 har blitt erstattet av to dobbelt null, og den erstattede verdien er 5000.

Eksempel-4: Erstatt den siste forekomsten av et ord med et annet ord

Følgende 'sed' -kommando vil søke i ordet 'Jun' i strengen og erstatt den siste forekomsten av ordet med verdien, 'Kan'.

$ printf "%s \ n" tr '\ n' "|
sed 's/\ (.*\) Jun/\ 1May/'| tr "'\ n'

Følgende utgang vises etter å ha kjørt kommandoen. Her, ordet 'Jun' eksisterer to ganger i strengen, og den siste forekomsten er erstattet av ordet 'Kan'.

Bytt ut den siste forekomsten av en tekst i en fil:

Lag en tekstfil som heter Salg.tekst Med følgende innhold for å teste 'Sed' -kommandoen som ble brukt i denne delen av opplæringen for å erstatte den siste forekomsten av en tekstbasert på mønsteret.

Salg.tekst

Månedårets beløp
Januar 2018 $ 200000
Mars 2019 $ 300000
April 2019 $ 150000
Mars 2020 $ 350000
Mai 2019 $ 210000
Januar 2020 $ 240000

Eksempel-5: Erstatt den siste forekomsten av et ord med et annet ord

Følgende 'sed' -kommando vil søke i ordet 'Januar'I filen og erstatt den siste forekomsten av dette ordet med ordet, 'Juli'.

$ kattesalg.tekst
$ sed '$ s/januar/juli/' salg.tekst

Følgende utgang vises etter å ha kjørt kommandoene. Ordet 'Januar' vises to ganger i filen. Den siste forekomsten som finnes i 7th Linjen i filen er erstattet av ordet 'Juli'I utgangen.

Eksempel-6: Erstatt den siste forekomsten av et tall med et annet tall

'tac' Kommando brukes til å snu innholdet i filen. 'tac' Kommando brukes med 'Sed' -kommandoen i følgende kommando for å erstatte den siste forekomsten av '2019'med ordet, '2017'.

$ kattesalg.tekst
$ TAC salg.txt | sed '0,/2019/s/2019/2017/' | tac

Følgende utgang vises etter å ha kjørt kommandoene. Her, årets verdi, '2019'vises tre ganger i filen. Den første, 'tac' Kommandoen har omgjort innholdet i filen og sendt utdataene inn i 'Sed' kommando for å erstatte den første forekomsten av '2019' som er den siste forekomsten i filen etter årets verdi, '2017'. Etter erstatningen er utdataene sendt til 'tac' Kommando for å reversere utgangen igjen. På denne måten den siste forekomsten av '2019'har blitt erstattet av verdien, '2017'.

Eksempel-7: Erstatt alt av en linje basert på den siste forekomsten av et ord

Følgende 'Sed' Kommandoen vil erstatte linjen med en fane (\ t) avgrenset tekst der linjen starter med strengen 'Mar' For siste gang i filen.

$ kattesalg.tekst
$ TAC salg.txt | sed '0,/^mar.*/S/^mar.*/Juli \ t \ t2018 \ T $ 400000/ '| tac

Følgende utgang vises etter å ha kjørt kommandoene. To linjer i filen starter med strengen, 'Mar', og den siste forekomsten av denne strengen vises i 5th linje. Den første 'tac' Kommandoen har blitt brukt til å snu innholdet i filen og sendt utdataene til 'sed ' kommando. 'sed'Command har erstattet linjen med en tekst,'Jully 2018 $ 400000'Hvor søkestrengen ble funnet for første gang. Utgangen av 'Sed'Kommando er sendt til 'tac' kommando igjen for å reversere utdataene som er hovedinnholdet i filen.

Konklusjon:

'Sed' -kommando kan brukes til å erstatte deler av en streng eller en linje i filen på forskjellige måter ved å bruke vanlige uttrykksmønstre. Denne opplæringen viste måtene å erstatte den siste forekomsten av den søkende teksten i en streng eller en fil ved å bruke flere 'Sed' -kommandoer. Hvordan 'TAC' -kommandoen kan brukes med 'Sed' -kommandoen for å erstatte den siste forekomsten av søketeksten, er også vist i denne opplæringen. Men alle kommandoene som brukes her vil generere utgangen midlertidig. Du må bruke alternativet '-i' med 'Sed' -kommandoen for å endre innholdet i filen permanent basert på mønsteret.