digamos que tengo
abc-def1-xxx abc-def2-yy-vv abc-def3 abc-def4 Quiero generar abc-def3 y abc-def4
Si uso el patrón abc-def* , genera todo. Si busco abc-def*-* , muestra las dos primeras entradas. ¿Cómo obtengo las dos últimas entradas?
Puede hacer que el patrón sea más específico haciendo coincidir caracteres en minúsculas con un guión y haciendo coincidir 1 o más dígitos al final
^ Comienzo de cadena[az]\+ Partido 1+ caracteres az- Coincidir literalmente[az]\+ Partido 1+ caracteres az[0-9]\+ Partido 1+ dígitos$ Fin de la cadenaPor ejemplo
echo "abc-def1-xxx abc-def2-yy-vv abc-def3 abc-def4" | grep '^[az]\+-[az]\+[0-9]\+$'Producción
abc-def3 abc-def4 También podría hacer coincidir, por ejemplo abc-def y luego 1 o más dígitos:
^abc-def[0-9]\+$Digamos que los datos se colocan en un archivo, data.txt
abc-def1-xxx abc-def2-yy-vv abc-def3 abc-def4El comando para obtener las dos últimas líneas es:
grep -E '*[0-9]$' data.txtExplicación:
-E , el patrón se interpreta como una expresión regular extendida.* : cualquier caracter[0-9] : un dígito$ : termina con el carácter justo antes de $ . Aquí, indica que la cadena debe terminar con un dígito.Entonces mira las líneas en data.txt y genera las líneas donde el último carácter es un dígito, del 0 al 9.