• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

130
Views
Grep solo los números de Linux Shell

Tengo una salida curl como se muestra a continuación y necesito grep solo los números de esa salida.

Salida de rizo

 <h1>JVM</h1><p>Free Memory:2144.78 MB Total Memory:3072.00 MB Max Memory:3072.00 MB</p><table border="0">

Comando Grep

 grep -o -i 'Max Memory:.*' | awk '{ print $3 }'

Producción

 MB</p><table

Salida esperada: 3072.00

Del mismo modo para Memoria Libre y Memoria Total.

Por favor ayuda

over 3 years ago · Santiago Trujillo
3 answers
Answer question

0

Primera solución: con las muestras mostradas, intente seguir en GNU grep .

 grep -oP 'Total Memory:\K\S+' Input_file

O en caso de que desee hacer coincidir los dígitos exactos que vienen para el valor de la memoria, intente lo siguiente:

 grep -oP 'Total Memory:\K\d+(?:\.\d+)?(?=\s)' Input_file

Explicación: La explicación simple sería usar las opciones -o y -P de GNU grep en primer lugar. Para imprimir solo el texto coincidente y habilitar el sabor de expresiones regulares PCRE. Luego, en el programa principal grep , use regex para hacer coincidir la Total Memory: se buscará seguido de \K , lo que significa que si se encuentra la coincidencia anterior, olvídese de la coincidencia. Luego, hacer coincidir \S+ significa hacer coincidir todo lo que no sea espacio (s) antes de que llegue un espacio que capturará el valor de la memoria total.



Segunda solución: en caso de que desee obtener 3 valores en la salida para memoria libre, máximo y total, intente seguir el código awk . Escrito y probado en GNU awk .

 awk -v RS='(Free Memory:|Total Memory:|Max Memory:)[^[:space:]]+' 'RT{sub(/.*:/,"",RT);print RT}' Input_file

NOTA: En caso de que su salida no esté en un archivo de entrada, puede usar la tubería a su comando anterior y luego ejecutar este.

over 3 years ago · Santiago Trujillo Report

0

Aquí hay otro gnu grep para obtener todos los números de memoria en un solo comando:

 s='<h1>JVM</h1><p>Free Memory:2144.78 MB Total Memory:3072.00 MB Max Memory:3072.00 MB</p><table border="0">' grep -oP '\w+ Memory:\K[\d.]+' <<< "$s" 2144.78 3072.00 3072.00
over 3 years ago · Santiago Trujillo Report

0

También puede usar sed para extraer todos los detalles necesarios de la cadena:

 fm=$(sed -n 's/.*Free Memory:\([^ ]*\).*/\1/p' file) tm=$(sed -n 's/.*Total Memory:\([^ ]*\).*/\1/p' file) mm=$(sed -n 's/.*Max Memory:\([^ ]*\).*/\1/p' file)

Vea la demostración en línea :

 #!/bin/bash s='<h1>JVM</h1><p>Free Memory:2144.78 MB Total Memory:3072.00 MB Max Memory:3072.00 MB</p><table border="0">' fm=$(sed -n 's/.*Free Memory:\([^ ]*\).*/\1/p' <<< "$s") tm=$(sed -n 's/.*Total Memory:\([^ ]*\).*/\1/p' <<< "$s") mm=$(sed -n 's/.*Max Memory:\([^ ]*\).*/\1/p' <<< "$s") echo "fm=$fm, tm=$tm, mm=$mm" # => fm=2144.78, tm=3072.00, mm=3072.00

Detalles :

  • -n suprime la salida de línea predeterminada
  • .*Free Memory:\([^ ]*\).* - coincide con toda la línea que contiene
    • .* - cualquier cero o más caracteres
    • Free Memory: - una cadena fija
    • \([^ ]*\) - Grupo 1 ( \1 ): cualquier cero o más caracteres que no sean espacios
    • .* - cualquier cero o más caracteres
  • /\1/ - reemplaza la línea que coincide con el valor del Grupo 1
  • p - imprime el resultado de la sustitución exitosa.
over 3 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error