Zoek en vervang tekst in meerdere documenten vanaf de opdrachtregel

Als u vertrouwd bent met de opdrachtregel en ooit in een situatie waarin u een woord, woordgroep, URL of teken in een groep van meerdere tekstdocumenten moet vinden en vervangen, doet perl het werk redelijk goed. Een eenvoudige opdrachtreeks zal zeer snel een groepsbatch vinden en vervangen op tekst, ongeacht of dit in een enkel document is of in een groep van meerdere documenten.

Zoals zoveel dingen in de opdrachtregel, is er geen bevestigingsproces, dus u moet ervoor zorgen dat uw syntaxis correct is ingesteld voordat u een opdracht start, anders moet u misschien nog een zoekopdracht uitvoeren om uw typfout te herstellen.

De basissyntaxis van de opdracht is als volgt:

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

Als u bijvoorbeeld in één exemplaar alle instanties van "ogre" met "maisbrood" in elk .txt-bestand in de map "Documents" wilt vervangen, gebruikt u de volgende opdracht:

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

Laten we voor een voorbeeld van het vinden en vervangen van een hele zin, veronderstellen dat we de hele zin "The Chocolate Factory" vervangen door "The Wizard of Oz" in een groep .txt-bestanden die begint met "Films" die in de documenten zijn opgeslagen directory:

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

Het vinden en vervangen gebeurt onmiddellijk. U kunt de wijziging controleren door kat en grep te gebruiken om te controleren:

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

Toegegeven, dit is vrij geavanceerd, en ja, batch-zoeken en -vervangen via meerdere documenten kan gedaan worden op een meer gebruikersvriendelijke manier via GUI-apps zoals TextWrangler en BBEdit, maar soms is de opdrachtregel gewoon sneller voor snelle taken zoals deze en andere die zijn vergelijkbaar, plus het vereist geen extra downloads om te gebruiken.

Een grote duim omhoog voor Lifehacker voor de uitstekende truc.

Update : de opdracht 'sed' is een andere manier om snel te zoeken en te vervangen via de opdrachtregel. Covered is meestal een onderwerp voor een ander artikel, maar de basissyntaxis van het gebruik van sed voor deze taak is een beetje eenvoudiger en dus gemakkelijker te onthouden:

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

Er is geen goede of slechte manier, dus of u perl of sed gebruikt, is een kwestie van persoonlijke voorkeur.