Esto también se puede hacer en bash puro. Suponiendo que el texto siempre se parece a la muestra en la pregunta, el siguiente debería funcionar:
$ text="Infosome - infotwo: (29333) - data-info-ids: (33389, 94934)"
$ result="${text/*(}"
$ echo ${result//[,)]}
33389 94934
Esto utiliza cáscara "expansión de parámetros" (que se puede buscar en la página del manual de bash) para despojar a la cadena de la misma forma en que lo hizo usando tr
. Estrictamente hablando, las citas en la segunda línea no son necesarias, pero ayudan con el resaltado de sintaxis de StackOverflow. :-)
Usted puede alternativamente hacer esto un poco más flexible mediante la búsqueda de la campo real que le interesa Si está usando GNU awk, puede especificar RS con múltiples personajes:.
$ gawk -vRS=" - " -vFS=": *" '
{ f[$1]=$2; }
END {
print f["data-info-ids"];
# Or you could strip the non-numeric characters to get just numbers.
#print gensub(/[^0-9 ]/,"","g",f["data-info-ids"]);
}' <<<"$text"
Prefiero esta forma, porque realmente interpreta los datos de entrada por lo que son: texto estructurado que representa algún tipo de matriz.
¿Qué quiere decir con limpio/óptimo? ¿Cuál es su criterio para el éxito? –
Me refiero a una forma más profesional de extraer la información –
Cambiar la palabra de "óptimo" a "profesional" no ayuda. :) –