regex - expresiones regulares bash
AWK: acortado if-then-else con regex (3)
No tan corto:
/REGEX/ {Action-if-matches}
! /REGEX/ {Action-if-does-not-match}
Pero (g) awk también es compatible con el operador ternario:
{ /REGEX/ ? matching=1 : matching = 0 ; if ( matching ==1 ) { matching_action } else { notmatching_action } }
ACTUALIZACIÓN :
De acuerdo con el gran Glenn Jackman, puedes asignar variables en el partido como:
m = /REGEX/ { matching-action } !m { NOT-matching-action }
El siguiente formato AWK:
/REGEX/ {Action}
Ejecutará Action
si la línea actual coincide con REGEX
.
¿Hay alguna manera de agregar una cláusula else
, que se ejecutará si la línea actual no coincide con la expresión regular, sin usar explícitamente if-then-else, algo como:
/REGEX/ {Action-if-matches} {Action-if-does-not-match}
Puedes hacer un "truco". Como saben, AWK intenta hacer coincidir la entrada con cada expresión regular para ejecutar su bloque.
Este código ejecuta el segundo bloque si $ 1 es "1", de lo contrario ejecuta el tercer bloque:
awk ''{used = 0} $1 == 1 {print $1" is 1 !!"; used = 1;} used == 0 {print $1" is not 1 !!";}''
Si la entrada es:
1
2
Se imprime:
1 is 1 !!
2 is not 1 !!
También está el next
:
/REGEX/ {
Action
next # skip to the next line
}
{ will only get here if the current line does *not* match /REGEX/ }