obtener valor parte de una palabra específica en AIX

obtener valor parte de una palabra específica en AIX

Quiero buscar una cadena y necesito parte de la cadena.

archivo.txt:

CREATE MULTISET TABLE $$ENV$$_TEMP_ESM.EMPASGMTAMPTMPRTRSE, NO FALLBACK , 
    NO BEFORE JOURNAL, 
    NO AFTER JOURNAL, 
    CHECKSUM = DEFAULT, 
    DEFAULT MERGEBLOCKADSRATIO

mientras usa el siguiente sedcomando obtiene valor adicional

Producción:

bash-4.3$ sed -n 's/.*$$ENV$$_//p' file.txt

**TEMP_ESM.EMPASGMTAMPTMPRTRSE** ,NO FALLBACK ,

solo necesitoTEMP_ESM.EMPASGMTAMPTMPRTRSE

Respuesta1

sed -n 's/.*$$ENV$$_//p' example.txt

El comando s/pattern/replacement/busca seden todas las líneas la aparición de la expresión regular patterny la reemplaza. Con el reemplazo vacío, se elimina el patrón, que parece ser lo que desea.

El final pgenera la línea modificada, mientras que la opción suprime toda la salida predeterminada -n.

Respuesta2

Con GNU grepcuando se construye con soporte PCRE (reciente) (como es común en los sistemas GNU y BSD):

grep -Po '\Q$$ENV$$_\E\K[^\s,]+' < file

extraería todas las secuencias de caracteres distintos de los espacios en blanco y la coma que siguen a cada aparición de $$ENV$$_.

Si GNU grepno está disponible, se puede hacer lo mismo con perl(el Pen PCRE):

perl -lne 'print for /\$\$ENV\$\$_\K[^\s,]+/g' < file

O si la perlversión es demasiado antigua para ser compatible \K:

perl -lne 'print for /\$\$ENV\$\$_([^\s,]+)/g' < file

Respuesta3

sedacercarse:

sed -n 's/^CREATE.*$_\([^[:space:],]*\).*/\1/p' file
  • \([^[:space:],]*\)- el primer grupo capturado que contiene caracteres excepto espacios en blanco [:space:]y coma,

La salida:

TEMP_ESM.EMPASGMTAMPTMPRTRSE

Respuesta4

sed '/.*$$ENV$$_/!d;s///;s/,.*//'
  • /.*$$ENV$$_/!d: Si la línea no contiene $$ENV$$_, no hay salida, no hay procesamiento adicional
  • s///: eliminar el patrón coincidente
  • s/,.*//: elimina la coma y todo lo que sigue

información relacionada