Finn og erstatt tekst i flere dokumenter fra kommandolinjen

Hvis du er komfortabel med kommandolinjen og alltid i en situasjon der du må finne og erstatte et ord, en setning, en URL eller et tegn over en gruppe med flere tekstdokumenter, gjør jobben jobben ganske bra. En enkel kommandostreng vil raskt utføre en gruppebatch finne og erstatte på tekst, enten i et enkelt dokument eller over en gruppe med flere dokumenter.

Som mange ting i kommandolinjen, er det ingen bekreftelsesprosess, så du vil sørge for at syntaksen er riktig satt før du starter en kommando, ellers kan det hende du må gjøre en annen finne og erstatte for å reparere skrivefeltet.

Den grunnleggende kommandosyntaxen er som følger:

perl -pi -w -e 's/THIS/THAT/g;' /path/to/files*.txt

For et enkeltordeksempel, hvis du trenger å erstatte alle forekomster av "ogre" med "cornbread" i hver .txt-fil i mappen "Dokumenter", vil du bruke følgende kommando:

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

For et eksempel på å finne og erstatte en hel setning, la oss anta at vi skal erstatte hele setningen "The Chocolate Factory" med "The Wizard of Oz" i en gruppe av .txt-filer som starter med "Filmer" lagret i Dokumenter katalogen:

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

Finne og erstatte gjøres umiddelbart. Du kan dobbeltsjekke endringen ved å bruke katt og grep for å sjekke:

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

Ganske vist er dette ganske avansert, og ja, batch finne og erstatte gjennom flere dokumenter kan gjøres på en mer brukervennlig måte gjennom GUI-apper som TextWrangler og BBEdit, men noen ganger er kommandolinjen bare raskere for raske oppgaver som dette og andre som er lik, pluss det krever ikke noen ekstra nedlastinger å bruke.

En stor tommel opp til Lifehacker for det gode trikset.

Oppdatering : Kommandoen 'sed' er en annen måte å gjøre rask finne og erstatte gjennom kommandolinjen. Dekket er for det meste et emne for en annen artikkel, men den grunnleggende syntaksen for bruk av sed for denne oppgaven er litt enklere og dermed lettere å huske:

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

Det er ingen riktig eller feil måte, så om du bruker perl eller sed blir et spørsmål om personlig preferanse.