Hur sätter man in en rad efter matchen med `sed`?

How Insert Line After Match Using Sed



Ett av de användbara och kraftfulla kommandona i Linux är sed -kommandot. Detta kommando används för att utföra olika typer av uppgifter i Linux, till exempel infoga, uppdatera och ta bort en viss text eller rad baserat på matchningen. Du kan infoga en text i en sträng eller en fil på olika sätt med hjälp av sed -kommandot.

Hur du sätter in en rad efter att ha hittat en matchning i en sträng eller en rad visas i den här självstudien.







Infoga en rad i strängen

En ny rad kan infogas efter valfritt strängvärde med sed -kommandot om mönstret som definieras i kommandot matchar med någon del av strängvärdet.



Följande exempel visar hur en ny rad kan läggas till efter ett strängvärde om en viss sträng finns någonstans i strängvärdet.



Exempel-1: Infoga en rad i en sträng efter att ha hittat en matchning

Följande kommando söker ing i strängen, jag gillar programmering och en textrad, gillar du programmering? infogas efter strängen om söksträngen finns.





Här används & -tecknet för att infoga raden efter strängen.

$kastade ut 'Jag gillar att programmera.' | sed 's / inng / & Gillar du programmering? /'

Följande utdata visar att ing inte existerar i strängen och att ingen rad infogas efter strängen.




Följande kommando söker efter. i strängen gillar jag att programmera och det finns i strängen.

$kastade ut 'Jag gillar att programmera.' | sed 's/ing ./& Gillar du att programmera?/'

Följande utdata visar att den nya raden läggs till efter strängen.

Infoga en rad i en fil

Det finns två sätt att infoga en rad efter att en matchning hittats i en fil som nämns nedan. När sed -kommandot används utan alternativet -i, förblir innehållet i filen oförändrat och utmatningen visar filinnehållet med den infogade nya raden. Du måste använda alternativet -i med sed -kommandot för att infoga den nya raden permanent i filen om matchningsmönstret finns i filen.

A. Använda a i sed -kommandot

A kan användas i sökmönstret för sed för att lägga till en eller flera rader i en fil efter raden där sökmönstret matchar eller efter ett visst radnummer.

B. Använda i i kommandot sed

Jag kan användas i sökmönstret för sed -kommandot för att infoga en eller flera rader i en fil före raden där sökmönstret matchar.

Infoga rad (er) i en fil baserat på mönstret:

Skapa en flikavgränsad textfil med namnet products.txt med följande innehåll för att visa användningen av ovanstående flagga i sed -kommandot.

products.txt

ID -namn

01 Vispa grädde

02 Kakaopulver

03 Socker

04 Ägg

05 Mjöl

Exempel-2: Infoga en rad efter ett visst radnummer med hjälp av a

Följande kommandon visar hur en ny rad kan läggas till efter ett visst radnummer i filen products.txt, baserat på mönstret som används i sed -kommandot.

Här kommer det första kommandot att visa det befintliga innehållet i filen. Sed -kommandot lägger till texten, b01 Bakpulver, efter de två första raderna i filen. Det sista kommandot används för att kontrollera att filinnehållet ändras eller inte.

$kattproducts.txt

$sed '2 a b01 tBakpulver'products.txt

$kattproducts.txt

Följande utdata visas efter att ovanstående kommando har körts.

Exempel-3: Infoga en rad efter den sista raden med hjälp av a

Följande kommando visar hur du lägger till en ny rad efter den sista raden i filen. Det första och sista kommandot visar det befintliga innehållet i filen före och efter körningen av sed -kommandot. $ -Symbolen används i mönstret för sed -kommandot för att nämna den sista raden i filen.

$kattproducts.txt

$sed '$ a b01 tBakpulver'products.txt

$kattproducts.txt

Följande utdata visas efter att ovanstående kommando har körts.

Exempel-4: Infoga en rad var som helst i filen efter att ha matchat ett mönster med hjälp av a

Följande sed -kommando visar hur en ny rad kan läggas till var som helst i filen baserat på matchande mönster. Mönstret som används i sed -kommandot söker efter vilken rad som helst som börjar med s01 och lägger till den nya strängen efter den. Den fjärde raden i filen börjar med s01, och den nya raden infogas efter den raden.

$kattproducts.txt

$sed '/^s01.*/a b01 tBakpulver'products.txt

$kattproducts.txt

Följande utdata visas efter att kommandot körts.


Följande sed -kommando söker efter en rad som slutar med pulver och sätter in den nya raden efter den. Den tredje raden i filen slutar med Pulver. Så den nya raden infogas efter den raden.

$kattproducts.txt

$sed '/Pulver $/a b01 tBakpulver'products.txt

$kattproducts.txt

Följande utdata visas efter att ha kört ovanstående kommandon.

Exempel 5: Infoga flera rader efter matchningsmönstret med hjälp av a

Följande sed -kommando visar sättet att lägga till flera rader i innehållet i en fil baserat på matchande mönster.

Här kommer två rader att läggas till efter den tredje raden, enligt mönstret.

$kattproducts.txt

$sed '/^[a-c]/a b01 t Bakpulver nb02 t Bakpulver'products.txt

$kattproducts.txt

Följande utdata visas efter att ha kört ovanstående kommandon.

Exempel 6: Infoga en rad efter att ha matchat ett mönster med I

$kattproducts.txt

$sed '/cream/i b01 tBakpulver'products.txt

$kattproducts.txt

Följande utdata visas efter att ha kört ovanstående kommandon.

Exempel -7: Infoga en rad permanent efter matchningsmönstret med alternativet -i

Följande sed -kommando visar hur du ändrar innehållet i filen permanent. Alternativet i används med sed -kommandot för att infoga en ny rad i filen baserat på mönstret.

$kattproducts.txt

$sed -i '/e $/a g01 tGhee'products.txt

$kattproducts.txt

Följande utdata visas efter att ha kört ovanstående kommandon.

Slutsats:

Sätten att infoga två eller flera rader i en fil med sed -kommandot med mönster har visats i den här självstudien för att hjälpa läsaren att tillämpa detta kommando för att infoga rader i tillfälligt eller permanent baserat på mönstret.