Línea de comandos de Linux magia - buscar y reemplazar

on December 24, 2008 por Sukrit Dhandhania el 24 de diciembre de 2008

Linux

Cuando se trabaja en la línea de comandos de Linux y se encuentra con un archivo grande o un gran número de archivos en los que usted necesita para reemplazar a un determinado texto con otro, la búsqueda y pegar en cada instancia del texto puede ser un poco tiempo. Bueno, no te preocupes más. Linux acaba de la solución para usted. He aquí una forma de buscar y reemplazar una cadena de texto en uno o más archivos automáticamente.

A los efectos de este ejercicio vamos a utilizar una herramienta de línea de comandos de Linux llamada "sed". "Sed" es una poderosa y versátil herramienta, y mucho se puede escribir acerca de sus capacidades. Estamos utilizando un aspecto muy limitado de "sed" aquí. Sin duda recomiendo que lea un poco más en la "sed", si usted encuentra este interesante aspecto de la misma.

Vamos a usar la siguiente sintaxis para buscar y reemplazar una cadena de texto en un archivo:

# Sed-i 's / [orginal_text] / [new_text] /' filename.txt

Diga usted tiene un archivo llamado "database.txt" con numerosos ejemplos de la dirección IP de su servidor de base de datos en ella. Usted acaba de cambiar a un nuevo servidor de base de datos y la necesidad de actualizarlo con la nueva dirección IP del servidor. La antigua dirección IP es 192.168.1.16 y la nueva es 192.168.1.22. Aquí está cómo hacerlo:

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

Ahora abra el archivo "database.inc" y compruebe si la nueva dirección IP ha tenido lugar de su vieja. Esta es la disolución de la anterior comando. Primero llame a la "sed" de mando. Luego de pasar el parámetro "-s", que significa "en lugar de". Ahora usamos un poco de las expresiones regulares, comúnmente conocida como "la expresión regular" para el siguiente bit. La "s" en la citada cadena significa "sustituto" y "g" al final significa "global". Entre ellos se traducen en un "mundial de la sustitución de la cadena de texto que en el lugar entre ellos.

Opcionalmente se puede omitir la "g" al final. Esto significa que la sustitución no será mundial, que prácticamente se traduce en la sustitución de sólo la primera instancia de la cadena en una línea. Así que si había una línea con varias instancias del texto que usted está tratando de sustituir, esto es lo que sucederá

# 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

Aquí viene la magia real. Ahora, digamos que usted desea cambiar una cadena de texto no sólo en un único archivo, pero en todo el directorio en el que se in Hay una serie de archivos de texto en el que usted necesita para encontrar y reemplazar el "vino" con "champagne" .

# Find. maxdepth-1-name "*. txt"-type f-exec sed-i 's / vino / champán /' () \

Usamos el comando find para obtener una lista de todos los archivos de texto en el directorio actual. Ese es el "encontrar. maxdepth-1-name "*. txt"-type f "parte. "Encontrar. Maxdepth 1" decirle al ordenador a buscar en el directorio actual y no van más profundo que el directorio actual. La "-name" *. txt " 'le dice a encontrar parte de la lista sólo los archivos con la extensión". Txt ". Entonces, el "tipo f" especifica que la sección "Buscar" sólo debe recoger los archivos que se correspondan exactamente. Por último, el "exec" parte dice "Buscar" para ejecutar el comando que sigue, que, en este caso, es la "sed" para sustituir el texto - "sed-i 's / vino / champán /' () \ ".

Me doy cuenta de que el comando anterior, parece complicado. Sin embargo, una vez que lo use un poco te darás cuenta que es probable que sea digno de mención y que utilizando. Ahora trate de cambiar una cadena de texto en múltiples niveles de directorios.

Puestos relacionados:
  • Proceso en ejecución en segundo plano con nohup
  • Empezar a utilizar el editor de textos Vim
  • Cómo descargar archivos desde la línea de comandos de Linux
  • Cómo establecer la fecha en su máquina Linux
  • ¿Cómo configurar las máquinas virtuales en Apache
  • Get Simple Ayuda tutoriales como este en tu bandeja de entrada cada día - para libre! Sólo tienes que introducir tu dirección de correo electrónico a continuación:

    Siempre puede optar por salir de este mensaje de correo electrónico de suscripción en cualquier momento.


    Guardar y Compartir

    2 comments… read them below or (2 comentarios ... leer a continuación o añadir un )

    1 marco 12.29.08 en 11:36 pm

    > Luego de pasar el parámetro "-s", que significa "en lugar de".
    Creo que debe ser "-i"

    2 myhnet 12.31.08 a las 9:03 pm

    Ahora abra el archivo "database.inc" y compruebe si la nueva dirección IP ha tenido lugar de su vieja.

    database.inc aquí creo que debería ser database.txt

    Déjanos tu comentario

    Usted puede utilizar estas etiquetas HTML y atributos: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>