Linux línea de comandos magia - buscar y reemplazar

Vídeo: el comando diff de 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 un texto determinado con otro, encontrar y pegar sobre cada instancia del texto puede ser un poco lento. Bueno, no se preocupe más. Linux tiene la solución para usted. He aquí una manera de buscar y reemplazar una cadena de texto en uno o más archivos de forma automática.

Para el propósito de este ejercicio vamos a utilizar una herramienta de línea de comandos de Linux llamada “sed”. “Sed” es una herramienta muy potente y versátil, y mucho se puede escribir sobre sus capacidades. Estamos utilizando un aspecto muy limitado de “sed” aquí. Sin duda recomiendo que lea un poco más en la “sed” si encuentra este aspecto de interesante.

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

# sed -i ‘s / [orginal_text] / [new_text] /` filename.txt

Digamos que tiene un archivo llamado “database.txt” con numerosos casos 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 dirección IP del nuevo servidor. La antigua dirección IP es 192.168.1.16 y el nuevo es 192.168.1.22. He aquí cómo usted va sobre él:

# database.txt gato
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 “database.inc” archivo y comprobar para ver si la nueva dirección IP ha tenido lugar de la antigua. Aquí está la ruptura del comando anterior. En primer lugar se llama al comando “sed”. Luego se le pasa el parámetro “-s”, que significa “en lugar de”. Ahora usamos un poco de expresiones regulares, comúnmente conocido como “expresiones regulares” para el siguiente bit. La “s” en la cadena entre comillas es sinónimo de “sustituto”, y el “g” al final significa “global”. Entre ellos dan lugar a una “sustitución global de la la cadena de texto se coloca en medio de ellos.

Puede omitir opcionalmente el “g” al final. Esto significa que la sustitución no será global, 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 múltiples apariciones del texto que está intentando sustituir, esto es lo que sucederá

# database.txt gato
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
# database.txt gato
LOCAL_DATABASE = 192.168.1.22
Local_dir = / home / Calvin /
PROD_DB = 192.168.1.22, 192.168.1.16

Vídeo: find comando linux

Aquí viene la magia real. Ahora, supongamos que desea cambiar una cadena de texto no sólo en un solo archivo, pero en todo el directorio que se encuentra. Hay una serie de archivos de texto en el que usted necesita para buscar y reemplazar el “vino” con “champán” .

# encontrar . -maxdepth 1 -name “* .txt” type f -exec sed -i ‘s / vino / champán /`{}

Vídeo: Buscar desde la terminal con grep

Usamos el comando find para obtener una lista de todos los archivos de texto en el directorio actual. Esa es la “encontrar. -maxdepth 1 -name “* .txt” -type f”parte. "encontrar . maxdepth 1 "decir la computadora para buscar en el directorio actual y no ir más profundo que el directorio actual. El ‘-nombre“* .txt”‘parte le dice a encontrar sólo los archivos de lista con la extensión ‘.txt’. A continuación, la sección “type f” especifica que “encontrar” sólo debe elegir los archivos que coincidan exactamente. Por último, la parte “-exec” dice “buscar” para ejecutar el comando que sigue, la cual, en este caso, es el comando “sed” para reemplazar el texto - “{} -i sed `s / vino / champán /` ”.

Soy consciente de que el comando anterior parece complicado. Sin embargo, una vez que lo utilice un poco se dará cuenta que es probable que sea digno de mención hacia abajo y usarla. Ahora trate de cambiar una cadena de texto en varios niveles de directorios.

Artículos Relacionados