Wanneer u aan de Linux bevellijn werkt en u komt over een groot dossier of een groot aantal dossiers waarin u moet een bepaalde tekst met andere vervangen dat, dat en over elke instantie van de tekst vindt een kleeft kan een tijdrovend beetje zijn. Goed, maak me niet meer ongerust. Linux heeft enkel de oplossing voor u. Hier is een manier om een koord van tekst in één of meerdere dossiers automatisch te vinden en te vervangen.
Voor deze oefening zullen wij een Linux geroepen hulpmiddel van de bevellijn „sed“ gebruiken. “ sed“ is een zeer krachtig en veelzijdig hulpmiddel, en kan een over zijn mogelijkheden worden geschreven. Wij gebruiken hier een zeer beperkt aspect van „sed“. Ik zou adviseren absoluut dat u een weinig meer op „sed“ bestudeert als u dit aspect van het vindt die interesseert.
Wij gaan de volgende syntaxis gebruiken om een koord van tekst in een dossier te vinden en te vervangen:
# sed - I' s [original_text]/[new_text]/' filename.txt
Zeg u een dossier genoemd „database.txt“ met talrijke instanties van het IP adres van uw gegevensbestandserver daarin hebt. U hebt net op een nieuwe gegevensbestandserver overgeschakeld en het met het IP van de nieuwe server moeten bijwerken adres. Het oude IP adres is 192.168.1.16 en nieuwe is 192.168.1.22. Hier is hoe u over het gaat:
# kat database.txt
LOCAL_DATABASE = 192.168.1.16
LOCAL_DIR = /home/calvin/
PROD_DB = 192.168.1.16
# sed - I' s 192.168.1.16/192.168.1.22 /g' database.txt
# cin database.txt
LOCAL_DATABASE = 192.168.1.22
LOCAL_DIR = /home/calvin/
PROD_DB = 192.168.1.22
Open nu het dossier „database.inc“ en controle om te zien of heeft het nieuwe IP adres van uw oude plaatsgevonden. Hier is het verbreken van het bovengenoemde bevel. Eerst roept u het „sed“ bevel. Dan gaat u het over de parameter „- s“ dat zich voor „in plaats van“ bevindt. Nu gebruiken wij een weinig regelmatige uitdrukkingen, die algemeen als „regex“ worden bekend voor het volgende beetje. „S“ in de geciteerde koordtribunes voor „substituut“, en „g“ betekenen aan het eind „globaal“. Tussen hen resulteren zij in een „globale substitutie van het koord van tekst u tussen hen plaatst.
U kunt „g“ aan het eind naar keuze overslaan. Dit betekent dat de substitutie niet globaal zal zijn, wat praktisch aan de substitutie van slechts de eerste instantie van het koord in een lijn vertaalt. Zo als u een lijn met veelvoudige instanties van de tekst had probeert u te vervangen, is hier wat zal gebeuren
# cat database.txt
LOCAL_DATABASE = 192.168.1.16
LOCAL_DIR = /home/calvin/
PROD_DB = 192.168.1.16, 192.168.1.16
# sed -i ’s/192.168.1.16/192.168.1.22/’ database.txt
# cat database.txt
LOCAL_DATABASE = 192.168.1.22
LOCAL_DIR = /home/calvin/
PROD_DB = 192.168.1.22, 192.168.1.16
Here comes the real magic. Now, say you want to change a string of text not just in a single file, but in the entire directory you are in. There are a number of text files in which you need to find and replace the “wine” with “champagne”.
# find . -maxdepth 1 -name “*.txt” -type f -exec sed -i ’s/wine/champagne/’ {} \
We use the find command to get a list of all the text files in the current directory. That’s the “find . -maxdepth 1 -name “*.txt” -type f” part. “find . maxdepth 1″ tell the computer to look in the current directory and go no deeper than the current directory. The ‘-name ”*.txt”‘ part tells find to only list files with the extension of “.txt”. Then the “-type f” section specifies that “find” should only pick exactly matching files. Finally the “-exec” part tells “find” to execute the command that follows, which, in this case, is the “sed” command to replace the text - “sed -i ’s/wine/champagne/’ {} \”.
I realize that the above command seems complicated. However, once you use it a little bit you will realize that it is probably worth noting it down and using it. Now try changing a string of text in multiple levels of directories.
Related Posts:





























{ 3 comments… read them below or add one }
> Then you pass it the parameter “-s” which stands for “in place of”.
I think it must be “-i”
Now open the file “database.inc” and check to see if the new IP address has taken place of your old one.
database.inc here I think it should be database.txt
Eso es muy facil….
pero por ejemplo como harias lo siguiente
tienes una ruta windows en un codigo y quieres pasarla a ruta de tipo linux
la cadena que buscas es C:\ejemplos\archivos\aqui
Cambiarla a /ejemplos/archivos/aqui
para un grupo de archivos que se encuentran en la misma carpeta…
Leave a Comment