Linux Befehl Linie Magie - finden Sie und ersetzen Sie

durch Sukrit Dhandhania auf 24. Dezember 2008

Linux

Wenn Sie auf der Linux Befehl Linie arbeiten und Sie eine große Akte oder auf viele Akten zufällig stoßen, in denen Sie einen bestimmten Text mit anderen ersetzen müssen, können das Finden und das Kleben über jedem Fall des Textes eine zeitraubende Spitze sein. Gut sorgen Sie sich nicht mehr. Linux hat gerade die Lösung für Sie. Ist hier eine Weise, eine Zeichenkette des Textes in einen oder mehrer Akten automatisch zu finden und zu ersetzen.

Für diese übung, die wir eine Linux Befehl Linie das benannte Werkzeug „benutzen, sed“.  “ sed“ ist ein sehr leistungsfähiges und vielseitiges begabt Werkzeug und kann über seine Fähigkeiten viel geschrieben werden. Wir verwenden einen sehr begrenzten Aspekt von „sed“ hier. Ich würde definitiv empfehlen, daß Sie herauf wenig mehr auf „sed“ lesen, wenn Sie diesen Aspekt von ihm interessierend finden.

Wir werden die folgende Syntax verwenden, um eine Zeichenkette des Textes in einer Akte zu finden und zu ersetzen:

# sed - i' s [original_text]/[new_text]/' filename.txt

Sagen haben Sie eine Akte, die „database.txt“ mit zahlreichen Fällen des IP address Ihres Datenbankbedieners in ihm genannt wird. Sie haben gerade zu einem neuen Datenbankbediener geschalten und müssen ihn mit IP address des neuen Bedieners aktualisieren. Das alte IP address ist 192.168.1.16 und das Neue ist 192.168.1.22. Ist hier, wie Sie über es gehen:

# Katze 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
# cbei database.txt
LOCAL_DATABASE = 192.168.1.22
LOCAL_DIR = /home/calvin/
PROD_DB = 192.168.1.22

Jetzt öffnen Sie die Akte „database.inc“ und überprüfen Sie, um zu sehen, wenn das neue IP address von Ihrem alten stattgefunden hat. Ist hier das Auseinanderbrechen des oben genannten Befehls. Zuerst benennen Sie „sed“ Befehl. Dann führen Sie es den Parameter „- s“, den für „anstatt“ steht. Jetzt verwenden wir ein wenig von den regelmäßigen Ausdrücken, allgemein bekannt als „regex“  für die folgende Spitze. Das „s“ in den Standplätzen der veranschlagenen Zeichenkette für „Ersatz“ und der „g“ auf den Ende Ständen für „globales“. Zwischen ihnen ergeben sie einen „globalen Ersatz der Zeichenkette des Textes, den Sie zwischen ihnen setzen.

Sie können den „g“ am Ende beliebig überspringen. Dies heißt, daß der Ersatz nicht global ist, der praktisch zum Ersatz nur der ersten Instanz der Zeichenkette in einer Linie übersetzt. So, wenn Sie eine Linie mit mehrfachen Fällen des Textes hatten, den Sie versuchen zu ersetzen, ist hier, was geschieht

# 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>