GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo usar la anticipación para excluir caracteres especiales en una expresión regular

Puedes omitir grep y haz esto en un solo awk :

xrandr | awk 'NF >= 3 && /[0-9]+x[0-9]+/ {sub(/[+-].*/, "", $3); print $3}'

1920x1200
1920x1200
primary
1029x1200

Soltero alternativo gnu grep solución:

xrandr | grep -oP 'connected\h+\K(\d+x\d+|\S+)'

El (.*\d+x\d+)*^(?![\+]+\d\+\d) el patrón coincide y captura en el Grupo 1 una secuencia opcional de cero o más caracteres que no sean caracteres de salto de línea, tantos como sea posible, luego 1+ dígitos, x , 1+ dígitos, y luego requiere el inicio de la posición de la cadena (¡esto hace que el patrón falle todo el tiempo! ) y se asegura de que no haya uno o más + caracteres, un dígito, un + y un dígito inmediatamente a la derecha de la ubicación actual. Parece un patrón muy corrupto que nunca coincide con ninguna cadena.

Su lógica se puede implementar como

xandr | grep -oP '\b\d+x\d+(?!(?:\+\d+\+)?\d)'

Vea la demostración en línea y la demostración de expresiones regulares.

Detalles :

  • -oP - la salida solo coincide y habilita el motor de expresiones regulares PCRE
  • \b\d+x\d+(?!(?:\+\d+\+)?\d) :<último>
  • \b - límite de palabras
  • \d+ - uno o más dígitos
  • x - un x
  • \d+ - uno o más dígitos
  • (?!(?:\+\d+\+)?\d) - una anticipación negativa que falla la coincidencia si, inmediatamente a la derecha de la ubicación actual, hay
  • (?:\+\d+\+)? - una secuencia opcional de + , uno o más dígitos y +
  • \d - un dígito.

Linux
  1. Cómo usar BusyBox en Linux

  2. ¿Cómo usar un carácter especial como uno normal en Unix Shells?

  3. ¿En qué se diferencian las expresiones regulares de los comodines utilizados para filtrar archivos?

  4. ¿Convertir la contraseña con caracteres especiales para usar con el script Expect?

  5. Cómo usar Cat, Tac, More, Less – Comandos de Linux

Cómo usar rsync para excluir archivos y directorios en la transferencia de datos

Cómo usar la cola de látigo para crear guiones interactivos más fáciles de usar

¿Cómo escribir caracteres especiales?

Cómo usar más comandos en Linux para leer archivos de texto grandes

Expresión regular para encontrar caracteres dobles en Bash

¿Cómo cambiar el nombre de todos los archivos con caracteres especiales y espacios en un directorio?