GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo encontrar/grep qué hay entre String1 y String2?

Estoy tratando de extraer un valor de una cadena larga que puede cambiar con el tiempo. Entonces, por ejemplo, la cadena podría verse así

....../filename-1.9.0.3.tar.gz"<....

Y lo que quiero extraer es el valor entre filename- y .tar.gz , esencialmente la versión del archivo (1.9.0.3 en este caso). La razón por la que necesito hacerlo de esta manera es porque más tarde puedo ejecutar el comando y el valor será 1.9.0.6 o 2.0.0.2 o algo completamente diferente.

¿Cómo puedo hacer esto? Actualmente solo estoy usando grep, pero no me importaría usar otras utilidades como sed o awk o cut o lo que sea. Para que quede perfectamente claro, necesito extraer solo la parte de la versión del archivo de la cadena, ya que es muy larga (en ambos lados), todo lo demás debe cortarse de alguna manera.

Respuesta aceptada:

Con grep -P /pcregrep , utilizando una mirada positiva hacia atrás y una mirada positiva hacia adelante:

grep -P -o '(?<=STRING1).*?(?=STRING2)' infile

en su caso, reemplace STRING1 con filename- y STRING2 con .tar.gz

Si no tiene acceso a pcregrep y/o si su grep no es compatible con -P puede hacerlo con su herramienta de procesamiento de texto favorita. Aquí hay una forma portátil con ed eso te da el mismo resultado:

ed -s infile <<IN
g/STRING1/s// 
&/g
v/STRING1.*STRING2/d
,s/STRING1//
,s/STRING2.*//
,p
IN

Cómo funciona:se antepone una nueva línea a cada STRING1 ocurrencia (así que ahora hay como máximo una ocurrencia por línea) entonces todas las líneas no coinciden con STRING1.*STRING2 se eliminan; en los restantes solo conservamos lo que hay entre STRING1 y STRING2 e imprime el resultado.


Linux
  1. ¿Qué es un Makefile y cómo funciona?

  2. ¿Cuál es la diferencia entre localizar y encontrar el comando en Linux?

  3. ¿Diferencia entre '{}' y {} en el comando de búsqueda?

  4. ¿Qué es el correo y cómo se navega?

  5. ¿Cuál es la diferencia entre unlink y rm?

Cómo encontrar la diferencia entre dos directorios usando las herramientas Diff y Meld

Cómo encontrar una cadena o palabra específica en archivos y directorios

¿Qué es UID en Linux, cómo encontrarlo y cambiarlo?

Cómo encontrar una cadena en un archivo en Linux

¿Qué es EasyApache y cómo lo uso?

¿Qué es el comando Grep en Linux? ¿Por qué se usa y cómo funciona?