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=/}