Necesito ayuda para eliminar texto antes );
y después de |
los delimitadores en todas las líneas de un archivo de texto. Es decir:
SUBSCIBER_MSISDN=6289666195060');BEGIN DBMS_LOCK.SLEEP(5); END-- rKSy|
Y se supone que el resultado será así.
SUBSCIBER_MSISDN=6289666195060|
¿Alguna idea de cómo quitar esa parte? Es un archivo grande.
Me volveré loco si tengo que usarlo sed
.
Respuesta1
Suponiendo que lo que estás mostrando es una línea completa de algún archivo de entrada:
sed "s/'.*/|/" file >newfile
Esto reemplazaría todo después del primer '
carácter de cada línea con un |
carácter. El resultado se escribiría en un nuevo archivo mediante una redirección. Estoy usando comillas dobles alrededor de la sed
expresión ya que una cadena entre comillas simples nunca puede contener un carácter de comilla simple.
Dados los datos de ejemplo, esto produciría
SUBSCIBER_MSISDN=6289666195060|
Si además desea eliminar los espacios en blanco desde el inicio de la línea (su ejemplo parece hacer esto):
sed -e "s/'.*/|/" -e 's/^[[:blank:]]*//' file >newfile
o,
sed "s/'.*/|/; s/^[[:blank:]]*//" file >newfile
Si tienes aversión a sed
, puedes emplear awk
para hacer exactamente la misma transformación:
awk '{ sub("'"'"'.*", "|"); sub("^[[:blank:]]*", ""); print }' file >newfile
El aspecto funky '"'"'
es una comilla simple. Tiene que estar entre comillas dobles fuera de la cadena entre comillas simples que constituye el awk
código. También podríamos usar '\''
, es decir
awk '{ sub("'\''.*", "|"); sub("^[[:blank:]]*", ""); print }' file >newfile
O bien, puede utilizar el código ASCII octal para la comilla simple:
awk '{ sub("\047.*", "|"); sub("^[[:blank:]]*", ""); print }' file >newfile