Finn & Erstatt tekst i flere dokumenter fra kommandolinjen

Anonim

Hvis du er komfortabel med kommandolinjen og noen gang i en situasjon der du trenger å finne og erstatte et ord, en setning, URL eller et tegn på tvers av en gruppe med flere tekstdokumenter, gjør perl jobben ganske bra. En enkel kommandostreng vil veldig raskt utføre en gruppesøking og -erstatting på tekst, enten det er i et enkelt dokument eller som spenner over en gruppe med flere dokumenter.

Som mange ting på kommandolinjen, er det ingen bekreftelsesprosess, så du bør sørge for at syntaksen er riktig angitt før du starter en kommando, ellers må du kanskje gjøre en ny søk og erstatt for å reparere skrivefeilen din.

Den grunnleggende kommandosyntaksen er som følger: perl -pi -w -e 's/THIS/THAT/g;' /path/to/files.txt

For et eksempel med enkeltord, hvis du trenger å erstatte alle forekomster av "ogre" med "cornbread" i hver .txt-fil i "Dokumenter"-mappen, bruker du 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 «Sjokoladefabrikken ” med “The Wizard of Oz” i en gruppe med .txt-filer som starter med “Films” lagret i dokumentkatalogen:

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

Finn og erstatt gjøres umiddelbart. Du kan dobbeltsjekke endringen ved å bruke cat og grep for å sjekke:

"

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

Riktignok er dette ganske avansert, og ja, batch-søk og erstatning 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 ligner, pluss at det ikke krever noen ekstra nedlastinger for å bruke.

En stor tommel opp til Lifehacker for det utmerkede trikset.

Update: 'sed'-kommandoen er en annen måte å finne og erstatte raskt på via kommandolinjen. Å dekke sed er stort sett et emne for en annen artikkel, men den grunnleggende syntaksen for å bruke sed for denne oppgaven er litt enklere og dermed lettere å huske:

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

Det finnes ingen rett eller gal måte, så om du bruker perl eller sed blir et spørsmål om personlig preferanse.

Finn & Erstatt tekst i flere dokumenter fra kommandolinjen