21/03/2016, 08:50
|
|
Respuesta: script bash parsear string El manejo de cadenas en SHELL es bastante limitado, como podrás ver. Si tu script es complicado, harías mejor en escribirlo con Perl o Python.
Dicho eso, esto se puede hacer de muchas maneras (awk, cut, sed, e incluso subcadenas con bash), pero ya que empezaste usando sed, hagámoslo con sed:
VALORES=( $(sed 's/^.*bb:\([0-9]*\) KB cc:\([0-9]*\) KB.*$/\1 \2/' fichero.log) )
variableB=${VALORES[0]}
variableC=${VALORES[1]}
más allá de los paréntesis escapados \) y \(, lo que le pedimos a sed es que busque bb: seguido de números, la cadena literal " KB", y luego lo mismo con cc.
Esto mismo se puede hacer con:
- grep, y el modificador -o
- awk, usando el modificador -F que admite varios caracteres como delimitadores de campos
- cut, aunque deberías usar varios encadenados
Como comentario adicional: si el archivo es grande o hay muchas líneas para procesar, hacer un grep en el archivo para filtrar las líneas que te interesan suele ser más rápido que filtrarlas directamente con sed o awk.
Saludos. |