Tengo una cuerda
00:28:04 /usr/lib/jvm/jre/bin/java -DJDBC_CONNECTION_STRING= -Dspring.profiles.active=qa -XX:MaxPermSize=256
y quiero extraer la palabra qaque sigue -Dspring.profiles.active.
Tengo la cadena guardada en un archivo text.txt solo para hacer una demostración en ella.
Cuando lo hago
grep -r -o "spring.profiles.active=" text.txt
El resultado es spring.profiles.active=
Esta palabra no siempre es qa, podría ser prodo dev.
Lo que me gustaría hacer es encontrar la palabra spring.profiles.activey después el =extracto de esa palabra.
Me gustaría hacer un script de shell porque uso la palabra para configurar otros elementos en el servidor.
¿Es esto posible? Y si es así, ¿cómo lo hago?

Respuestas:
Puede usar
grepcon PCRE (-P):spring.profiles.active=coincidirá con esta subcadena literalmente,\Kdescartará la coincidencia[^ ]+seleccionará la porción deseada, es decir, la porción posteriorspring.profiles.active=, hasta el siguiente espacioPara un archivo:
Ejemplo:
sedtomaría una lógica similar:Ejemplo:
Errores de manejo:
En su secuencia de comandos, es posible que desee manejar el caso donde no hay coincidencia, en otras palabras, donde su cadena original no contiene
spring.profiles.active=. En elsedejemplo anterior , obtiene la cadena original completa, lo que podría crear problemas:Si prefiere obtener la cadena vacía cuando no hay coincidencia, agregue la
-nopción alsedcomando y lapopción alsedscomando, así:Luego puede probar si $ var está vacío o no.
fuente
var="$(grep -Po 'spring.profiles.active=\K[^ ]+' file.txt)"reemplazarfile.txtcon<<<'...string...'si la entrada es una cadena, no un file..then que puede hacerif [ "$var" = 'qa' ]; then do something; else do something; fiUtilizando
awko
Ejemplo
fuente
Lanzaré una Perl en la mezcla:
-l: habilita el procesamiento automático de final de línea. Tiene dos efectos separados. Primero, automáticamente divide $ / (el separador de registro de entrada) cuando se usa con -n o -p. En segundo lugar, asigna $ \ (el separador de registro de salida) para tener el valor de octnum, de modo que cualquier declaración de impresión tendrá ese separador agregado nuevamente. Si se omite octnum, establece $ \ en el valor actual de $ /.-a: activa el modo de división automática cuando se usa con -n o -p. Un comando de división implícito para la matriz @F se realiza como lo primero dentro del bucle while implícito producido por -n o -p.n: hace que Perl asuma el siguiente ciclo alrededor de su programa, lo que lo hace iterar sobre argumentos de nombre de archivo algo así como sed -n o awk:-e: puede usarse para ingresar una línea de programa.fuente
perl -nle '/spring.profiles.active=\K([^ ]+)/ && print $1' <<<'00:28:04 /usr/lib/jvm/jre/bin/java -DJDBC_CONNECTION_STRING= -Dspring.profiles.active=qa -XX:MaxPermSize=256'