varios varias utilizar texto test solo siguientes regulares regresará que puede patrones palabras palabra líneas los expresiones exacta egrep cuál con comiencen comandos comando caracteres buscar archivos regex bash grep

regex - varias - grep varios patrones



¿Cómo usar grep para obtener algo justo después de `name=`? (5)

Estoy atrapado en intentar grep cualquier cosa después de name= , incluir solo espacios y alfanuméricos.

p.ej:

name=some value here

yo obtengo

some value here

Soy totalmente nuevo en esto, el siguiente grep coincide con todo, incluido el name= .

grep ''name=.*'' filename

Cualquier ayuda es muy apreciada.


Como se detalla here , desea una cláusula look-behind positiva, como por ejemplo:

grep -P ''(?<=name=)[ A-Za-z0-9]*'' filename

El -P hace que grep use el dialecto de Perl, de lo contrario, es probable que necesites escapar del paréntesis. También puede, como se indica en otra parte, agregar el parámetro -o para imprimir solo lo que coincide. La parte entre paréntesis especifica que desea caracteres alfanuméricos y espacios.

La ventaja de utilizar una cláusula lookbehind positiva es que el texto "name =" no es parte de la coincidencia. Si grep resalta el texto coincidente, solo resaltará la parte alfanumérica (y espacios). El parámetro -o tampoco mostrará la parte "name =". Y, si transfiere esto a otro programa como sed que podría capturar el texto y hacer algo con él, no capturará la parte "name =", aunque también puede hacerlo mediante el uso de paréntesis de captura.


Prueba esto:

sed -n ''s/^name=//p'' filename

Le dice a sed que no imprima nada (-n) por defecto, sustituye su prefijo por nada, e imprima si ocurre la sustitución.

Bono: si realmente lo necesita para que coincida solo las entradas con solo espacios y alfanuméricos, puede hacerlo también:

sed -n ''s/^name=/([ 0-9a-zA-Z]*$/)//1/p'' filename

Aquí hemos agregado un patrón para hacer coincidir espacios y alfanuméricos solo hasta el final de la línea ($), y si coincidimos, sustituimos el grupo entre paréntesis e imprimimos.


grep imprimirá toda la línea donde coincida con el patrón. Para imprimir solo el patrón emparejado, use la opción grep -o. Probablemente también necesitará usar sed para eliminar el nombre = parte del patrón.

grep -o ''name=[0-9a-zA-Z ]'' myfile | sed /^name=/d


grep no se extrae como esperabas. Lo que necesitas es

grep "name=" file.txt | cut -d''='' -f1-


papar moscas

echo "name=some value here" | awk -F"=" ''/name=/ { print $2}''

o con bash

str="name=some value here" IFS="=" set -- $str echo $1 unset IFS

o

str="name=some value here" str=${str/name=/}