Buscar y reemplazar con el comando SED
   
Linux Solutions Center    
Bienvenido a    :: LINUX SOLUTIONS CENTER ::
México, 
Home Manuales Buscar y reemplazar con el comando SED
Linux Solutions C.
Buscar en Linuxsc
Actualidad
GNU/Linux
Gente en Línea
Tenemos 82 invitados conectado(s)
Acceso



Estadísticas
Ver contenido por hits : 1055046
El Clima
Mar Mie Jue
La encuesta del día
¿Cuál es la Red Social que usas más?
 
Anunciate aquí

Centro de Soluciones Linux

Santa Clara Ocoyucan

KoalaSoft-Sitio de Amigos
Computer Fixers



Buscar y reemplazar con el comando SED PDF Imprimir E-mail Hits: 1670
Lunes, 25 de Mayo de 2009 06:31

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.

Para 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

Cambiar de /usr/bin/ --> /usr/local/bin/
sed 's/\/usr\/bin\//\/usr\/local\/bin\//g'

Digamos que se tiene un archivo llamado "database.txt" con numerosos ejemplos de la dirección IP de su servidor de base de datos en ella. El cual uno 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
#cat 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 /' {} \;
# find . -type f -exec  sed  -i  s/cadenaVieja/cadenaNueva/g {} \;


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 /' () \ ".

Última actualización el Viernes, 11 de Marzo de 2011 11:52
 








Chinese (T)EnglishGermanGreekKoreanPolishPortugueseSpanish
Linuxsc está disponible ahora.
Linuxsc en Android
QrDroid

Descarga el APK de Linuxsc
Linuxsc RSS.

Tu Futuro... Hoy
Felipe Angeles
Linuxsc en RSS
No. de Visitas
mod_vvisit_countermod_vvisit_countermod_vvisit_countermod_vvisit_countermod_vvisit_countermod_vvisit_countermod_vvisit_countermod_vvisit_counter
mod_vvisit_counterHoy476
mod_vvisit_counterAyer1583
mod_vvisit_counterEsta Semana2060
mod_vvisit_counterEste Mes10037
mod_vvisit_counterTotal1019061
News Feeds

Ultimo Reporte
Ranking Linux
http://www.wikio.es