Find & Erstat tekst i flere dokumenter fra kommandolinjen

Anonim

Hvis du er fortrolig med kommandolinjen og nogensinde i en situation, hvor du har brug for at finde og erstatte et ord, en sætning, en URL eller et tegn på tværs af en gruppe af flere tekstdokumenter, klarer perl jobbet ganske godt. En simpel kommandostreng vil meget hurtigt udføre en gruppe-batchsøgning og -erstatning på tekst, hvad enten det er i et enkelt dokument eller spænder over en gruppe af flere dokumenter.

Som mange ting på kommandolinjen er der ingen bekræftelsesproces, så du vil sikre dig, at din syntaks er indstillet korrekt, før du starter en kommando, ellers skal du muligvis foretage en ny find og erstat for at reparere din tastefejl.

Den grundlæggende kommandosyntaks er som følger: perl -pi -w -e 's/THIS/THAT/g;' /sti/til/filer.txt

For et eksempel med et enkelt ord, hvis du skal erstatte alle forekomster af "ogre" med "cornbread" i hver .txt-fil i mappen "Dokumenter", så skal du bruge følgende kommando:

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

For et eksempel på at finde og erstatte en hel sætning, lad os antage, at vi skal erstatte hele sætningen "Chokoladefabrikken ” med “The Wizard of Oz” i en gruppe af .txt-filer, der starter med “Films”, gemt i mappen Dokumenter:

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

Find og erstat udføres med det samme. Du kan dobbelttjekke ændringen ved at bruge cat og grep til at kontrollere:

"

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

Det er ganske vist ret avanceret, og ja, batchfinding og -erstatning gennem flere dokumenter kan gøres på en mere brugervenlig måde gennem GUI-apps som TextWrangler og BBEdit, men nogle gange er kommandolinjen bare hurtigere til hurtige opgaver som denne og andre, der ligner, plus at det ikke kræver yderligere downloads for at bruge.

En stor tommelfinger op til Lifehacker for det fremragende trick.

Opdater: Kommandoen 'sed' er en anden måde at finde og erstatte hurtigt på via kommandolinjen. At dække sed er for det meste et emne for en anden artikel, men den grundlæggende syntaks for at bruge sed til denne opgave er en smule enklere og dermed lettere at huske:

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

Der er ingen rigtig eller forkert måde, så om du bruger perl eller sed bliver et spørgsmål om personlig præference.

Find & Erstat tekst i flere dokumenter fra kommandolinjen