Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Grep Mostrando Líneas Anteriores Y Posteriores A La Búsqueda
Autor Mensaje
Responder citando   Descargar mensaje 
Mensaje Grep Mostrando Líneas Anteriores Y Posteriores A La Búsqueda 
 
Buenas!.

A la hora de poder ver el resultado sobre las características del ratón, usé el comando grep buscando la palabra Mouse.
El problema es que eso solo me mostraba la línea que coincidía con la palabra Mouse.

Entonces me di cuenta de que grep tiene la opción. Before -B y After -A
Detrás de esta línea de argumentos le añades un número y te mostrará los resultado anteriores y posteriores incluyendo la búsqueda.
Por ejemplo:

Esto me mostraba solo el lugar de la coincidencia.

grep Mouse < dispositivos.txt
 


Luego pude usar algo como esto:

grep Mouse -B5 -A12 < dispositivos.txt
 


Resultado fue:

Citar:

Disable-w-typing: n/a
Accel profiles:   n/a
Rotation:         n/a

Device:           Logitech USB-PS/2 Optical Mouse
Kernel:           /dev/input/event4
Group:            5
Seat:             seat0, default
Capabilities:     pointer
Tap-to-click:     n/a
Tap-and-drag:     n/a
Tap drag lock:    n/a
Left-handed:      disabled
Nat.scrolling:    disabled
Middle emulation: disabled
Calibration:      n/a
Scroll methods:   button


Así podía encontrar el lugar desde comenzaba la descripción y donde acababa.
Lo curioso es que había una línea en blanco entre el resumen de los dispositivos.
Pero no tenía ni idea de como decir eso en una línea de comandos.

Al final opte por un bucle, que me costó entender la condicional.
La primera usa dos corchetes y la siguiente solo una.
Si no se usaba dos corchetes en la primera parece que buscaba encontrar un comando llamado como el contenido de la expresión.

#!/bin/bash

# Comprobar si existe el comando en el sistema
# Vamos a comprobar y a usar el comando libinput para mostrar información del ratón

if [ -a "/usr/bin/libinput" ]; then
        echo "El comando libinput existe en su sistema."
        echo "El comando necesita permiso de super usuario para ejecución"    
        while IFS= read -r line
        do
            # Se comprueba si la línea de texto leída contiene la palabra Mouse
            if [[ "$line" == *"Mouse"* ]]; then
                echo "$line"
                while IFS= read -r line2        
                do
                    # Se comprueba que la línea de texto leída no es nula y tiene una longitud superior a cero
                    if [ -n "$line2" ]; then
                        echo "$line2"
                    else
                        # Esto parece que rompe los dos bucles
                        break
                    fi
                done
            fi
        done < <(sudo libinput list-devices)
else
        echo "El comando libinput no existe en su sistema."
        echo "Ejecute primero: sudo apt-get install libinput"
 


Entonces el primer bucle busca la palabra Mouse y luego otro bucle para llegar hasta donde se encuentra la línea en blanco.
Pero no tenía ni idea si el primer break rompería desde el bucle interno hasta el externo. Lo normal hubiese sido el interno.  

No encontré una forma más sencilla.  A lo mejor usando awk o sed. Complicando con signos y símbolos.
Podía haber usado un script hecho en gambas, pero no es un lenguaje que venga por defecto en el sistema.

Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
última edición por Shell el Miercoles, 10 Junio 2020, 13:04; editado 1 vez 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron