MediaAnalys Teknikblogg
Sökmotoroptimering och Internetmarknadsföring
Uppdatera text med grep, xarg och perl
Skrivet av Jimmy i kategorin Teknik
Idag brottades jag med ett problem där jag behövde byta ut en textsträng i ett antal filer, men jag visste inte vilka filer strängen fanns i. Det kändes lite jobbigt att leta igenom alla filer för hand och byta texten, så Joel kom på en bättre idé. Varför inte använda de verktyg som finns på servern, mer specifikt grep och perl?
Sagt och gjort. Efter lite efterforskningar hittade jag ett pålitligt kommando för att göra en enkel search and replace i alla filer i en mapp, inklusive alla undermappar.
Att hitta alla filer som innehöll texten var relativt enkelt med grep. Det ser ut så här:
grep -rli [textsträng] *
Stjärna i slutet ger grep instruktion om att läsa alla filer. [textsträng] betyder naturligtvis strängen att söka efter, men -rli är kanske lite mer svårtytt.
- -r betyder att leta igenom alla underkataloger
- -l gör att endast filnamnet där strängen hittades skrivs ut
- -i betyder att matcha både versaler och gemener
Nu har vi en fin lista med filer som innehåller texten vi letar efter. För att göra den ännu finare sorterar vi den med kommandot sort och förvissar oss om att det inte finns några dubletter med argumentet -u:
grep -rli [textsträng] * | sort -u
Nu är det dags för själva text-bytet. Här fick jag Googla en hel del, men hittade till slut ett perl-kommando som funkar bra:
grep -rli [textsträng] * | sort -u | xargs perl -pi~ -e 's/[textsträng]//i'
Här är det mycket på en gång, men jag ska försöka dela upp det i smådelar. xargs används för att utföra ett kommando för varje fil. perl används för att göra själva text-bytet. Ok, det var kanske inte så mycket ändå.

Skriv en kommentar