Enviar Respuesta  Enviar Tema 
Páginas (2): « Primera [1] 2 Siguiente > Ultima »
SED, Reemplazar strings en archivos
Autor Mensaje
angelm
Ututo-Developers


Mensajes: 308
Grupo: Registrado
Registro en: May 2006
Estado: Sin Conexión
Reputación: 5
Mensaje: #1
SED, Reemplazar strings en archivos

hola 1-wink
estoy creqndo un scrips para reeemplazar texto en archivos.

mi problema es como tratar una cadena de texto y que se la trate como tal Ej
buscar "hola/*sipi" donde /* son letras a buscar y no representan expresion regular

esto es muy importante para evitar tener que reescribir una compleja expresion cada ve que algun usuario especifique como busqueda carateres que son parte de expresiones regulares 1-wink

gracias

06-24-2006 10:40 PM
Encuentra todos los mensajes de este usuario Cita este mensaje en tu respuesta
warp
Q


Mensajes: 2,009
Grupo: Registrado
Registro en: Jun 2005
Estado: Sin Conexión
Reputación: 10
Mensaje: #2
RE: SED

hola angelm, veo que estas incursando en bash, me alegro.... antes que nada, para poner una / como si fuera parte del texto, al igual que todos los caracteres especiales que son utilizados tb en el lenguaje para otras cosas (como "), tenes que ponerle adelante un \ (al igual que en todos los lenguajes)....

quedaría así "blanco\/negro", así se saltea el operador /..... saludos.

si usas awk, podes hacer algo como:

VARIABLE=$(awk '/{texto a buscar}/ {print $3}' url)
en este caso awk busca en un archivo <url>, y te devuelve la tercera palabra de todas las lineas con coincidencia que encuentre, donde podes modificar cosas como el $3, a $2 o lo que desees, si varias el número a "n" te devuelve la palabra numero "n" de las líneas encontradas.

saludos....


06-24-2006 10:57 PM
Visita el website del usuario Encuentra todos los mensajes de este usuario Cita este mensaje en tu respuesta
angelm
Ututo-Developers


Mensajes: 308
Grupo: Registrado
Registro en: May 2006
Estado: Sin Conexión
Reputación: 5
Mensaje: #3
RE: SED

Hola 1-wink

Ta muy bueno 1-wink
Pero supongamos que la cadena a buscar de alamcene $cadena, y un ususario que no conoce nada de exprsiones regulares ni casa una de \/, \*, etc
como declara que la cadena es solo texto en sed ej

echo "Buscar palabra"; read cadena
echo "Reemplazar po"; read remplaza
echo "en archivo"; read files
sed s/$cadena/$remplaza/g $file

El error de esta sentencia seria que si el usuario busca "querido/a" sed mal-interpreta /a.

muchas gracias 1-wink

06-25-2006 10:17 AM
Encuentra todos los mensajes de este usuario Cita este mensaje en tu respuesta
warp
Q


Mensajes: 2,009
Grupo: Registrado
Registro en: Jun 2005
Estado: Sin Conexión
Reputación: 10
Mensaje: #4
RE: SED

ahora esta más claro lo que pedis, te dejo esto, un regalito del foro:

Código:
#
# Script: Reemplace Text Files.
# Descripcion: Reemplaza todas las ocurrencias de una palabra dentro de un archivo.
# Version: 0.01.
#

#!/bin/bash

function check_data() {
        if [ -f "$1" ]; then
                echo -e "File\t[FOUND]"
        else
                echo -e "\nERROR: File do not exist or not been correctly specified... (use -h (| --help) for help)\n"
                exit
        fi
        if [ "$2" != "" ]; then
                echo -e "Text to Reemplace\t[Ok]"
        else
                echo -e "\nERROR: Text to reemplace not been correctly specified... (use -h (| --help) for help)\n"
                exit
        fi
        if [ "$3" != "" ]; then
                echo -e "Text\t[Ok]"
        else
                echo -e "\nERROR: Text not been correctly specified... (use -h (| --help) for help)\n"
                exit
        fi
        reemplace_text $1 $2 $3
}

function reemplace_text() {
        cp $1 $1.bak
        if [ -f "$1.bak" ]; then
                echo -e "Backuping...\t[Ok]"
        else
                echo -e "\nERROR: Backup file cannot be created... (Contact Admin)\n"
                exit
        fi
        sed "s_"$3"_"$2"_g" < $1 > $1.tmp
        cp $1.tmp $1
        rm $1.tmp
        echo -e "Remplace Complete...\t[Ok]\n\n"
}

while [ "$1" != "" ]; do
        case $1 in
                -f | --cfg )    shift
                                FILENAME=$1
                                ;;
                -r | --remp )    shift
                                TREEMPLACE=$1
                                ;;
                -t | --text )    shift
                                TEXT=$1
                                ;;
                -h | --help )   shift
                                HELP="OK"
                                ;;
                * )             echo "ERROR: Unrecognized Option. (use -h (| --help) for help)"
                                exit
        esac
        shift
done
if [ "$HELP" != "OK" ]; then
        echo -e "\n"
        check_data $FILENAME $TREEMPLACE $TEXT
else
        echo -e "\n---------------------------------------------------------------------------"
        echo "Reemplace Text Files (v0.01) By warptrosse"
        echo "---------------------------------------------------------------------------"
        echo -e "\nUse reemplace_words_files.sh -f (| --file) <filename> -r (| --remp) <text_to_remplace> -t (| --text) <text>"
        exit
fi



Archivo(s) Adjuntados
.sh File  reemplace_words_files.sh (Tamaño: 2.21 KB / Descargas: 7)

06-25-2006 07:07 PM
Visita el website del usuario Encuentra todos los mensajes de este usuario Cita este mensaje en tu respuesta
angelm
Ututo-Developers


Mensajes: 308
Grupo: Registrado
Registro en: May 2006
Estado: Sin Conexión
Reputación: 5
Mensaje: #5
RE: SED, Reemplazar strings en archivos

hola 1-wink
El archivo a.txt tiene este texto:
queridos tio\\/as

Cuando ejecuto el sh, tanto el a.txt como a.txt.bak son igual sin ningun cambio.

Cuando ejecuto sed me tira
ututo-xs sh.org # sed "s_"queridos tio\\/as"_"si"_g" < a.txt
sed: -e expression #1, char 10: Unterminated `s' command

Como podemos hackear eso 1-wink
Y Gracias 1-wink

06-26-2006 09:48 AM
Encuentra todos los mensajes de este usuario Cita este mensaje en tu respuesta
p_eter
Chaos Manager
*******
Administrador

Mensajes: 4,168
Grupo: Administrador
Registro en: Jun 2005
Estado: En Línea
Reputación: 12
Mensaje: #6
RE: SED, Reemplazar strings en archivos

La primera que se me cruza es: antes ejecutar la conversión efectiva, hacer una auxiliar previa que cambie los caracteres comflictivos por otros y al final restablecerlos por los originales.


06-26-2006 01:25 PM
Visita el website del usuario Encuentra todos los mensajes de este usuario Cita este mensaje en tu respuesta
angelm
Ututo-Developers


Mensajes: 308
Grupo: Registrado
Registro en: May 2006
Estado: Sin Conexión
Reputación: 5
Mensaje: #7
RE: SED, Reemplazar strings en archivos

como ?

06-26-2006 01:34 PM
Encuentra todos los mensajes de este usuario Cita este mensaje en tu respuesta
RompeRatones
Usuario PL


Mensajes: 78
Grupo: Registrado
Registro en: May 2005
Estado: Sin Conexión
Reputación: 4
Mensaje: #8
RE:  SED, Reemplazar strings en archivos

angelm Escribió:
hola 1-wink
El archivo a.txt tiene este texto:
queridos tio\\/as

Cuando ejecuto el sh, tanto el a.txt como a.txt.bak son igual sin ningun cambio.

Cuando ejecuto sed me tira
ututo-xs sh.org # sed "s_"queridos tio\\/as"_"si"_g" < a.txt
sed: -e expression #1, char 10: Unterminated `s' command

Como podemos hackear eso 1-wink
Y Gracias 1-wink


No entendi lo que queres hacer... a si  que muestro te algunas posibilidades que se me ocurren

Código:
german@Debian:~$ cat a.txt
queridos tio\\/as

german@Debian:~$  sed  's/\\//g'  a.txt  #le borramos las \
queridos tio/as

german@Debian:~$  sed  's/\\//g'  a.txt |sed -e 's/\///g'      ·le borramos las \ y las /
queridos tioas

german@Debian:~$  sed   's/\\//'  a.txt  # borramos una sola \
queridos tio\/as

german@Debian:~$  sed   's/\///'  a.txt  # borramos solo la /
queridos tio\\as


06-26-2006 02:20 PM
Visita el website del usuario Encuentra todos los mensajes de este usuario Cita este mensaje en tu respuesta
angelm
Ututo-Developers


Mensajes: 308
Grupo: Registrado
Registro en: May 2006
Estado: Sin Conexión
Reputación: 5
Mensaje: #9
RE: SED, Reemplazar strings en archivos

Hola 1-wink
un soft que reemplaze texto en archivos.

echo "file"; $1
echo "texto a rempl"; $3
echo "por "; $2
sed "s_"$3"_"$2"_g" < $1

Pero sed lee $3, $2 como expresiones regulares no como texto bruto.
Las personas que escriben los textos no saben de expresiones regulares, por eso si quieren remplazar queridos tio/as desconocen de queridos\ tio\/tas.
Se entiende 1-wink

06-26-2006 03:05 PM
Encuentra todos los mensajes de este usuario Cita este mensaje en tu respuesta
p_eter
Chaos Manager
*******
Administrador

Mensajes: 4,168
Grupo: Administrador
Registro en: Jun 2005
Estado: En Línea
Reputación: 12
Mensaje: #10
RE: SED, Reemplazar strings en archivos

angelm Escribió:
como ?


esconde preserva /

sed "s/\//666/g"


restablece /

sed "s/666/\//g"


06-26-2006 04:26 PM
Visita el website del usuario Encuentra todos los mensajes de este usuario Cita este mensaje en tu respuesta
angelm
Ututo-Developers


Mensajes: 308
Grupo: Registrado
Registro en: May 2006
Estado: Sin Conexión
Reputación: 5
Mensaje: #11
RE: SED, Reemplazar strings en archivos

Hola 1-wink
Eso yo ya lo se.
La idea es para user que no saben.
fijate el post anterior para tener una mejor vision del problema.

gracias 1-wink

06-26-2006 05:26 PM
Encuentra todos los mensajes de este usuario Cita este mensaje en tu respuesta
p_eter
Chaos Manager
*******
Administrador

Mensajes: 4,168
Grupo: Administrador
Registro en: Jun 2005
Estado: En Línea
Reputación: 12
Mensaje: #12
RE: SED, Reemplazar strings en archivos

No me explique:
a eso no lo hace el usuario, lo hace tu script. El usuario no tiene porque enterarse, ok?
Lo que quieres hacer (el usuario o quien sea ) va en medio.


06-26-2006 07:58 PM
Visita el website del usuario Encuentra todos los mensajes de este usuario Cita este mensaje en tu respuesta
Páginas (2): « Primera [1] 2 Siguiente > Ultima »
Enviar Respuesta  Enviar Tema 

Posibles Temas Similares...
Tema: Autor Respuestas: Vistas: Ultimo Mensaje
  [BASH] Convertir la codificación de todos los archivos de un directorio (iconv) warp 0 1,386 01-09-2007 01:04 AM
Ultimo Mensaje: warp
  [bash] Borrar archivos temporales .~ warp 1 2,981 12-29-2006 01:48 PM
Ultimo Mensaje: angelm

Ver la Versión para Impresión
Mandar este Tema a algún Amigo
Subscríbete a este Tema | Agrega este Tema a Tus Favoritos

Salto de Foro: