MediaAnalys Teknikblogg

Sökmotoroptimering och Internetmarknadsföring

MediaAnalys arbetar med sponsrade länkar och sökmotoroptimering (SEO). Genom sökoptimering och sökmarknadsföring hjälper vi företag som vill få nya kunder via Internet.

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å.

februari 4th, 2010

Skriv en kommentar