Unix - buscar y reemplazar string

 
Vista:
sin imagen de perfil

buscar y reemplazar string

Publicado por Abby (3 intervenciones) el 07/11/2016 13:36:52
Muy buenas gente,

desesperación máxima por este problema.
Tengo un xml (o varios) con muchos tags del tipo <INCOND NAME="KJHJUM-....> (como ejemplo)
El tema es, que debo cambiar esa X de KJHJUM por otra letra, por ejemplo X.

Una aproximación de ideas sería:
encontrar la fila que contiene <INCOND como inicio de fila
y luego jugar con una serie de " cut " para encontrar la última letra del string y reemplazarla con un sed.

algo así como:

intemp='echo $LaFilaQueEmpiezaPor<INCOND | cut -d "-" 1` #me quedo con la izda del -
incond=`echo $intemp | cut -d "=" 2` #con la derecha del igual
incond= $incond sed 's/"//g' #Para quitar las comillas que me molestan para otras cosas
y, asi ya debería tener la palabra KJHJUM luego la dividiría para reemplazar y tal...


El problema viene en que no encuentro la forma de encontrar fila a fila las que empiezan por INCOND y aplicarle una a una los comandos anteriores (bien escritos, claro)

He probado con grep pero no se si es una solución viable, almenos yo no lo super hacer....

Muchísimas gracias por vuestra ayuda y tiempo!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 12
Ha mantenido su posición en Unix (en relación al último mes)
Gráfica de Unix

buscar y reemplazar string

Publicado por Jose Luis (5 intervenciones) el 08/11/2016 01:02:49
Hola, la verdad me perdí con la explicación pero la solución debe ser a toda costa el comando sed.

"Tengo un xml (o varios) con muchos tags del tipo <INCOND NAME="KJHJUM-....> (como ejemplo)
El tema es, que debo cambiar esa X de KJHJUM por otra letra, por ejemplo X."
cual X por X ?

Saludos
José Luis
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

buscar y reemplazar string

Publicado por Abby (3 intervenciones) el 08/11/2016 10:30:28
Lo siento, me lié en la explicación.
Lo que me refería es:

Tengo un xml (o varios) con muchos tags del tipo <INCOND NAME="KJHJUM-....> (como ejemplo)
El tema es, que debo cambiar esa M de KJHJUM por otra letra, por ejemplo X, siendo el resultado algo como

<INCOND NAME="KJHJUX-....>

Sí, la clave parece estar en uan buena combinación de SED pero no encuentro la forma de "aislar" KJHJUM para reemplazarle el último caracter.

Muchísimas gracias por tu ayuda, un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 12
Ha mantenido su posición en Unix (en relación al último mes)
Gráfica de Unix

buscar y reemplazar string

Publicado por Jose Luis (5 intervenciones) el 09/11/2016 16:28:31
Hola,

Si cada renglón del archivo xml termina con un enter, utiliza el awk.

archivo XML
1
2
3
4
5
6
7
8
9
10
11
<plugin>
  <info>
    <name>Tracker</name>
    <module>libgrltracker</module>
    <description>A plugin for searching multimedia content using Tracker</descr$
    <author>Igalia S.L.</author>
    <license>LGPL</license>
    <INCOND NAME="KJHJUM-TESTTESTTES"> lxlxlxlx </INCOND>
    <site>http://www.igalia.com</site>
  </info>
</plugin>

con awk puedes hacer algo así...
awk '{if(match($0,"INCOND NAME=")) {x=substr($0,1,match($0,"INCOND NAME=")+12); print x } else print $0}' ejemplo.xml

Ya tu defines lo que quieres cambiar ,,,,

Saludos
José Luis
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

buscar y reemplazar string

Publicado por Abby (3 intervenciones) el 09/11/2016 16:35:46
Hola!
Muchas gracias por tu respuesta, me será muy útil seguro!!

La idea del awk la tenía en mente, pero nunca recuerdo cómo usarlo, me resulta complejo...de esas cosas que se atragantan para siempre.

Un saludo y gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 21
Ha mantenido su posición en Unix (en relación al último mes)
Gráfica de Unix

buscar y reemplazar string

Publicado por Javier (8 intervenciones) el 10/11/2016 20:27:40
estimado según ejemplo de Jose Luis

1
<INCOND NAME="KJHJUM-TESTTESTTES"> lxlxlxlx </INCOND>


es mucho mas practico un sed con expresiones regulares que lo hace mas exacto

1
sed -i -E '/^    <INCOND NAME="KJHJUM-[A-Z]+"> lxlxlxlx </INCOND>$/s/"KJHJUM-/"KJHJUX-/g'



[A-Z]+ SIGNIFICA QUE CUALQUIER CARACTER CON MAYUSCULA UNA O MAS VECES



saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 12
Ha mantenido su posición en Unix (en relación al último mes)
Gráfica de Unix

buscar y reemplazar string

Publicado por José Luis (5 intervenciones) el 10/11/2016 23:57:26
Es correcto.

Saludos
José Luis
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

buscar y reemplazar string

Publicado por Santiago (2 intervenciones) el 31/03/2017 18:06:41
Hola.

Se me ocurre que utilizaras vi para esto.

Si necesitas puntualmente reemplazar la cadena KJHJUM por KJHJUX abres el archivo con el comando vi, y estando en modo comando ejecutar:

:%s/KJHJUM/KJHJUX/g

luego guardar y salir pulsando ZZ

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar