Tengo un archivo de entrada FILE1.TXT como se muestra a continuación.
11 id1
12
13 AGE = 20
14 NAME = NAME1
15
16 id2
17
18 AGE = 30
19 NAME = NAME2
.
.
.
110 idXYZ
111
112 AGE = AGEXYZ
113 NAME = NAMEXYZ
114
115 idZZZ
116
Quiero buscar en todos los campos que pertenecen a un Id en particular y obtener el valor de NAME
Logré recorrer cada Id y formé el siguiente comando para cada Id según sea necesario.
sed -n '/11/,/14/p' FILE1.TXT | grep NAME | awk -F "= " '{print $2}'
El problema aquí es que obtengo la salida NAME1 , además de eso, también obtengo NAMEXYZ .
¿Qué se debe cambiar para que solo obtenga NAME1 pero no NAMEXYZ ?
Como solución alternativa, los siguientes comandos funcionan.
sed -n '/11/,/14/p' FILE1.TXT | grep NAME | awk -F "= " '{print $2}'|head -1
¿Hay algún 'interruptor' o me estoy perdiendo algo?

^(random no of spaces)11?sed -n '/^\s*11 /,/^\s*14 /p'sed -n '/^11 /,/^14 /p' | awk '/NAME/{print $NF}'¿has probado esto?Use límites de palabras:
coincidiría
NAME1y noNAME1XYZoXYZNAME1.Similar,
no coincidiría con las líneas que contienen
111y142.EDITAR: Parece que los números en el archivo de entrada son en realidad números de línea. Si ese es el caso, simplemente podría decir:
para obtener las líneas deseadas.
fuente
NAMEentre las líneas 11 y 14. Entonces, ¿por qué estásedmirando111y114? ¿Cómo hacer que no se vea en el medio111y114?sedexpresión.grepcon-wbandera? no es asi-wsería equivalente. Porsedejemplo,-wes ligeramente diferente.Puedes usar AWK
Esto buscará líneas entre 13 y 17, luego buscará Nombre y, si coincide, imprimirá la última palabra de
Name = LastWordfuente
$antesNRy eso causó el error.No necesita ninguna otra herramienta para esto,
sedlo manejará fácilmente por completo.Eso debería proporcionarle solo la primera secuencia de caracteres que no sean espacios en blanco después de la frase "NAME =" para cada línea en la que se encuentra esa frase entre las líneas 11 y 14 de cualquier archivo de entrada
sed.fuente
sed no es la herramienta adecuada para este trabajo. Use awk donde puede especificar la identificación que está buscando e imprima el siguiente NOMBRE que aparece.
fuente
versión genérica no basada en el número de línea sino en la referencia de identificación
fuente
Puede imprimir las líneas que contienen patrones coincidentes utilizando sed de la siguiente manera:
-n- estas opciones desactivan esta impresión automática, y sed solo produce resultados cuando se le indica explícitamente a través delpcomando.p- impresiónfuente