
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 sed
comando 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 sed
en todas las líneas la aparición de la expresión regular pattern
y la reemplaza. Con el reemplazo vacío, se elimina el patrón, que parece ser lo que desea.
El final p
genera la línea modificada, mientras que la opción suprime toda la salida predeterminada -n
.
Respuesta2
Con GNU grep
cuando 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 grep
no está disponible, se puede hacer lo mismo con perl
(el P
en PCRE):
perl -lne 'print for /\$\$ENV\$\$_\K[^\s,]+/g' < file
O si la perl
versión es demasiado antigua para ser compatible \K
:
perl -lne 'print for /\$\$ENV\$\$_([^\s,]+)/g' < file
Respuesta3
sed
acercarse:
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 adicionals///
: eliminar el patrón coincidentes/,.*//
: elimina la coma y todo lo que sigue