Ligne de commande de Linux magie - trouvez et remplacez

par Sukrit Dhandhania sur 24 décembre 2008

Linux

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:
  • Some useful Linux bash tricks
  • Running process in the background with Nohup
  • Get started using the Vim text editor
  • How to download files from the Linux command line
  • How to set the date on your Linux machine
  • Get Simple Help tutorials just like this one in your email inbox every day - for free! Just enter your email address below:

    You can always opt out of this email subscription at any time.


    Bookmark and Share

    { 3 comments… read them below or add one }

    1 marco 12.29.08 at 11:36 pm

    > Then you pass it the parameter ?-s? which stands for ?in place of?.
    I think it must be ?-i?

    2 myhnet 12.31.08 at 9:03 pm

    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

    3 Faustino 01.19.09 at 3:56 pm

    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

    You can use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>