¿Cómo eliminar texto antes del delimitador?

¿Cómo eliminar texto antes del delimitador?

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 sedexpresió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 awkpara 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 awkcó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

información relacionada