Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

158
Views
bash + cómo capturar la versión de rpm

esta es la forma cuando trato de obtener la versión de Kafka

 rpm -qa | grep "^kafka_" kafka_2_6_5_0_292-1.0.0.2.6.5.0-292.noarch

La versión de Kafka es 1.0, así que hice lo siguiente para cortar la versión de Kafka

 rpm -qa | grep "^kafka_" | sed s'/-/ /g' | awk '{print $2}' | cut -c 1-3 1.0 <----- results

arriba cli parece no ser tan elegante y sintaxis larga

¿Podemos hacerlo mejor, tal vez con Perl o Python?

over 4 years ago · Santiago Trujillo
7 answers
Answer question

0

Puede usar un solo awk :

 rpm -qa | awk -F- '/^kafka_/ && split($2, a, /\./) >= 1 {print a[1] "." a[2]}' 1.0
over 4 years ago · Santiago Trujillo Report

0

¿Funciona esta sed ?

 rpm -qa | grep '^kafka_' | sed 's/[a-z0-9_]*-\(...\).*/\1/'
over 4 years ago · Santiago Trujillo Report

0

Refactorizando tu código

 rpm -qa | grep "^kafka_" | sed s'/-/ /g' | awk '{print $2}' | cut -c 1-3

1er paso: use el FS (Field Seperator) de AWK en lugar del preprocesamiento en sed

 rpm -qa | grep "^kafka_" | awk 'BEGIN{FS="-"}{print $2}' | cut -c 1-3

2do paso: registre la acción {print $2} en las líneas que coincidan con la descripción en lugar de filtrarla con grep

 rpm -qa | awk 'BEGIN{FS="-"}/^kafka_/{print $2}' | cut -c 1-3

3er paso: use la función substr de AWK en lugar de cut -c

 rpm -qa | awk 'BEGIN{FS="-"}/^kafka_/{print substr($2,1,3)}'

Descargo de responsabilidad: mi respuesta asume que desea un comportamiento exactamente como su código original, incluso si es posiblemente inesperado, es decir, obtiene los primeros 3 caracteres de las partes de la versión, independientemente de cuántos dígitos haya en la segunda parte, por ejemplo, para 1.15.0.2.6.5.0-292 da 1.1

over 4 years ago · Santiago Trujillo Report

0

if k=$(rpm -qa | grep "^kafka_") then if [[ ${k#*-} =~ ^[0-9]+[.][0-9]+ ]] then k_version=$BASH_REMATCH else echo "can not determine kafka version from '$k'" fi else echo "No kafka in rpm" fi

La idea aquí es eliminar todo, desde la cadena de versión hasta el guión y luego usar una expresión regular para obtener la parte de la versión.

over 4 years ago · Santiago Trujillo Report

0

Con sus muestras mostradas, intente seguir el código awk . La explicación simple sería enviar la salida del comando rpm -qa como una entrada estándar al código awk . En el campo de configuración del programa awk - aeparator a -OR . y OFS a . . Luego, en el programa principal, verifique si una línea comienza desde kafka_ y luego imprima los campos 2 y 3 según las muestras que se muestran.

 rpm -qa | awk -F'-|\\.' 'BEGIN{OFS="."} /^kafka_/{print $2,$3}'
over 4 years ago · Santiago Trujillo Report

0

Esto se puede hacer completamente con (GNU) grep .

 grep -oP '^kafka_[^-]*-\K\d+\.\d+'

Por ejemplo,

 $ echo kafka_2_6_5_0_292-1.0.0.2.6.5.0-292.noarch | grep -oP '^kafka_[^-]*-\K\d+\.\d+' 1.0

Pero como pediste Perl o Python,

 perl -ne'print "$&\n" if /^kafka_[^-]*-\K\d+\.\d+/'
over 4 years ago · Santiago Trujillo Report

0

Por favor, muchas herramientas sobre paquetes devuelven datos con diferentes formatos. El comando rpm es una herramienta donde los resultados son diferentes entre la versión de la herramienta y el sistema (GNU/Linux, AIX...)...

Por lo tanto, cuando trabaje con el comando rpm en un script, nunca use la opción -q sola. Use el --queryformat (en breve --qf , con dos - ) para especificar la salida.

Consulte man rpm para obtener más información.

Ejemplo:

 $ rpm -q --qf "%{NAME}:%{VERSION}" firefox firefox:91.0.1

Las etiquetas se especifican así: %{...}

Los nombres de las etiquetas se obtienen con el comando rpm --querytags .

Ejemplo con nombre desconocido/parcial del paquete:

 $ rpm -qa --qf "%{NAME}:%{VERSION}\n" | grep '^kernel' kernel-srpm-macros:1.0 kernel-headers:5.13.3 kernel-core:5.13.12 kernel-modules:5.13.12 kernel:5.13.12 kernel-modules-extra:5.13.12

Nota:

  • \n se usa para separar todas las parejas de paquetes 'nombre:versión'
over 4 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 Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!