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

196
Views
Bash regex analizando la salida ss

Estoy tratando de usar una expresión regular de bash de una salida de comando ss para extraer el nombre de la aplicación que está usando un puerto determinado en una función. Tengo algunos problemas con la expresión regular.

El comando para verificar los datos es ss -tupln

Ejemplo de datos para analizar (ipv4):

 tcp LISTEN 0 10 0.0.0.0:80 0.0.0.0:* users:(("nc",pid=3474,fd=4)) tcp LISTEN 0 10 [::]:80 [::]:* users:(("nc",pid=3474,fd=3))

En este caso quiero extraer nc que es el nombre del programa que usa el puerto

Ejemplo de datos para analizar (ipv6):

 tcp LISTEN 0 511 *:80 *:* users:(("apache2",pid=6741,fd=4),("apache2",pid=6740,fd=4),("apache2",pid=6738,fd=4),("apache2",pid=6737,fd=4),("apache2",pid=6736,fd=4),("apache2",pid=6724,fd=4))

En este caso, quiero extraer apache2 , que es el nombre del programa que usa el puerto.

Necesito una expresión regular general válida para ambos casos. No me importa si se obtiene usando grep o si se hace usando pure bash regex. Mi enfoque no laboral:

 #!/bin/bash get_name() { local regexp="${1}.*[0-9\*]:${2}[[:blank:]]+.*[[:blank:]]+users:\(\(\"(.+)\"\," [[ $(ss -tupln) =~ ${regexp} ]] && process_name="${BASH_REMATCH[1]}" echo "${process_name}" } get_name "tcp" "80"

Gracias.

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Puedes usar awk así:

 $ ss -tupln | awk -v proto=tcp -v port=80 '$1 == proto && $5 ~ ":" port "$" {split($0, array, "\""); print array[2]}' apache2
over 4 years ago · Santiago Trujillo Report

0

Puede usar gnu grep:

 ss -tupln | grep -oP 'tcp\h.*?:80\h.*?\busers:\(\("\K[^"]+(?=")'

El patrón coincide:

  • tcp\h Coincide con tcp y un espacio
  • .*?:80\h Haga coincidir la menor cantidad posible de caracteres y luego :80 y un espacio
  • .*?\busers: coincidir la menor cantidad posible de caracteres y luego users:
  • \(\(" partido (("
  • \K[^"]+ Olvídese de lo que coincida demasiado (no será parte de la coincidencia resultante)
  • (?=") Anticipación positiva, afirmación = directamente a la derecha

Ver una demostración de expresiones regulares

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!