Quand vous travaillez sur la ligne de commande de Linux et vous trouvez un grand dossier ou un grand nombre de dossiers dans lesquels vous devez remplacer un certain texte avec des autres, la conclusion et l'empâtage au-dessus de chaque exemple du texte peuvent être un peu long. Bien, ne vous inquiétez pas plus. Linux a juste la solution pour toi. Voici une manière de trouver et remplacer une corde de texte dans un ou plusieurs dossiers automatiquement.
Afin de cet exercice que nous emploierons une ligne de commande de Linux outil appelé « sed ». ? » sed » est un outil très puissant et souple, et beaucoup peut être écrit au sujet de ses possibilités. Nous employons un aspect très limité de « sed » ici. Je recommanderais certainement que vous lisez vers le haut peu d'un plus sur « sed » si vous trouvez cet aspect de lui intéressant.
Nous allons employer la syntaxe suivante pour trouver et remplacer une corde de texte dans un dossier :
# sed - I' s [original_text]/[] de new_text/' filename.txt
Parole vous avez un dossier appelé le « database.txt » avec de nombreux exemples de l'IP address de votre serveur de base de données dans lui. Vous avez juste commuté à un nouveau serveur de base de données et devez le mettre à jour avec du nouveau l'IP address serveur. Le vieil IP address est 192.168.1.16 et le neuf est 192.168.1.22. Voici comment vous abordez lui :
# chat 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
# Cchez database.txt
LOCAL_DATABASE = 192.168.1.22
LOCAL_DIR = /home/calvin/
PROD_DB = 192.168.1.22
Maintenant ouvrez le dossier « database.inc » et vérifiez pour voir si le nouvel IP address a eu lieu de votre vieil. Voici la dissolution de la commande ci-dessus. D'abord vous appelez « sed » la commande. Alors vous lui passez le paramètre « - s » lequel représente « au lieu de ». Maintenant nous employons un peu des expressions régulières, généralement connu en tant que « regex » ? pour le prochain peu. Le « s » dans les stands de corde citée pour le « produit de remplacement », et le « g » aux stands d'extrémité pour « global ». Entre eux ils ont comme conséquence « une substitution globale la de la corde du texte que vous placez entre eux.
Vous pouvez sur option sauter le « g » à l'extrémité. Ceci signifie que la substitution ne sera pas globale, qui traduit pratiquement à la substitution du premier exemple seulement de la corde dans une ligne. Ainsi si vous aviez une ligne avec des exemples multiples du texte que vous essayez de remplacer, voici ce qui se produira
# 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