
Tengo un archivo que tiene una RESOURCE
palabra clave. Puede ocurrir en cualquier parte del archivo, como:
[email protected]
Ahora quiero reemplazar [email protected]
con [email protected]
. Tengo que buscar la línea donde puedo encontrar la RESOURCE
palabra clave y luego reemplazar la palabra después del signo igual. La RESOURCE
palabra clave no debe modificarse.
¿Alguien podría ayudarme con esto?
aporte:
[email protected]
Producción:
[email protected]
Respuesta1
grep
no es útil en este caso ya que no le permite modificar el contenido del archivo.
En cambio, se puede usar sed
así:
fromaddr='[email protected]'
toaddr='[email protected]'
sed '/^RESOURCE=/s/='"$fromaddr"'$/='"$toaddr"'/' file >newfile
dado file
como
some data
[email protected]
[email protected]
[email protected]
[email protected]
more data
esto crea newfile
como
some data
[email protected]
[email protected]
[email protected]
[email protected]
more data
La sed
expresión seleccionará líneas que comiencen con la cadena RESOURCE
. Para cada una de estas líneas, reemplazará la dirección de correo electrónico, si está presente en la línea. El patrón utilizado para la sustitución asegura que coincidamos =
y que la dirección termine al final de la línea.
Respuesta2
El sed
comando es mejor.
sed -i 's/[email protected]/[email protected]/' yourfile
Lo anterior funciona en mi prueba, pero si quieres probarlo por ti mismo, puedes probar este primero:
sed 's/[email protected]/[email protected]/' yourfile
Eso escribirá los cambios en la salida estándar sin afectar el archivo.
De cualquier manera, le brinda el cambio deseado de:
[email protected]
Si el valor de RESOURCE
es diferente en el archivo y desea cambiarlo por algo diferente, entonces:
grep RESOURCE= yourfile
Eso devolverá la línea donde está y mostrará el valor.
Luego puedes usar
sed 's/[email protected]/[email protected]/' yourfile
Para referencia futura, es importante dejar todo esto claro en su pregunta original para que pueda obtener la ayuda que necesita sin todo este galimatías.
Respuesta3
Parece que estás diciendo que deseas reemplazar la cadena que aparece después de =
,
no importa lo que es—
Por ejemplo,en los datos de muestra, desea reemplazar [email protected]
. Pero estás diciendo que, no importa cuál sea la cadena después de =
, quieres reemplazarla [email protected]
; aparentemente quieres que esté codificada.
Hay algunas variaciones sobre cómo hacer esto. El más simple es
sed 's/RESOURCE=.*/[email protected]/'
que (como todos los comandos a continuación) utiliza el hecho de que .*
significa "coincidir con lo que esté allí". Si no desea escribir RESOURCE=
dos veces, puede acortar lo anterior a
sed 's/\(RESOURCE=\).*/\[email protected]/'
donde \(
... \)
marca una parte de la cadena de búsqueda como un grupo (puede tener hasta nueve grupos) y \1
significa reemplazar con el primer grupo.
Los comandos anteriores buscarán y reemplazarán RESOURCE=
dondequiera que aparezcan en la línea. Así, por ejemplo, la entrada
# Lakshminarayana wants to change all occurrences of "RESOURCE=".
[email protected]
[email protected]
[email protected]
FOX RESOURCE=The quick brown fox
# Comment: Originally line 2 said [email protected]
sería cambiado a
# Lakshminarayana wants to change all occurrences of "[email protected]
[email protected]
[email protected]
[email protected]
FOX [email protected]
# Comment: Originally line 2 said [email protected]
Si desea hacer coincidir solo cuando RESOURCE=
aparece al principio de una línea, use^
:
sed 's/^RESOURCE=.*/[email protected]/'
o
sed 's/^\(RESOURCE=\).*/\[email protected]/'
Si desea reemplazar solo el valor del recurso y no todo el resto de la línea, por ejemplo,
[email protected] [email protected]
a
[email protected] [email protected]
eso también se puede hacer. Edite su pregunta para decir exactamente lo que quiere, con explicaciones completas y claras.yejemplos.
Bien, elige uno de los anterioress
comandos. Ahora, si desea editar su archivo en su lugar (como ha indicado), haga
sed -i { s command } { yourfile }
Si desea producir un nuevo archivo, haga
sed { s command } { oldfile } > { newfile }
En realidad, no escribas el{
y}
; están ahí sólo para la demarcación.