Hitta & Ersätt text i flera dokument från kommandoraden

Anonim

Om du är bekväm med kommandoraden och någonsin i en situation där du behöver hitta och ersätta ett ord, en fras, URL eller ett tecken över en grupp av flera textdokument, gör perl jobbet ganska bra. En enkel kommandosträng kommer mycket snabbt att utföra en grupp-batch-sökning och -ersättning på text, vare sig det är i ett enda dokument eller som spänner över en grupp av flera dokument.

Som många saker på kommandoraden finns det ingen bekräftelseprocess, så du vill se till att din syntax är korrekt inställd innan du initierar ett kommando, annars kan du behöva göra en ny sök och ersätt för att reparera ditt stavfel.

Den grundläggande kommandosyntaxen är följande: perl -pi -w -e 's/THIS/THAT/g;' /sökväg/till/filer.txt

För ett exempel med enstaka ord, om du behöver ersätta alla instanser av "ogre" med "cornbread" i varje .txt-fil i mappen "Dokument" använder du följande kommando:

perl -pi -w -e 's/ogre/cornbread/g;' ~/Documents/.txt

För ett exempel på att hitta och ersätta en hel fras, låt oss anta att vi kommer att ersätta hela meningen "The Chocolate Factory ” med ”Trollkarlen från Oz” i en grupp av .txt-filer som börjar med ”Films” lagrade i dokumentkatalogen:

perl -pi -w -e 's/The Chocolate Factory/The Wizard of Oz/g;' ~/Documents/Films.txt

Sök och ersätt görs omedelbart. Du kan dubbelkolla ändringen genom att använda cat och grep för att kontrollera:

"

cat ~/Documents/Films124.txt |grep Wizard of Oz"

… för snabba uppgifter som denna och andra som liknar, plus att det inte kräver några ytterligare nedladdningar för att använda.

En stor tumme upp till Lifehacker för det utmärkta tricket.

Uppdatera: Kommandot "sed" är ett annat sätt att snabbt hitta och ersätta genom kommandoraden. Att täcka sed är mest ett ämne för en annan artikel, men den grundläggande syntaxen för att använda sed för denna uppgift är lite enklare och därmed lättare att komma ihåg:

sed -i 's/THIS/THAT/g' /path/to/files.txt

Det finns inget rätt eller fel sätt, så om du använder perl eller sed blir en fråga om personlig preferens.

Hitta & Ersätt text i flera dokument från kommandoraden