
Supongamos que tengo un archivo como este:
adasfddfd09
dsassd90897
323sdsdsdsd
sdddsdf56
dfdf45fdfdf
Quiero buscar solo aquellas cadenas que tengan los dos últimos caracteres numéricos sed
con grep
y awk
.
Respuesta1
Comandos para grep y sed
Parece que la pregunta original tenía un formato incorrecto. Por tanto, los comandos grep y sed más simples son:
egrep '[0-9]{2}$' /path/to/file
y
sed -rn '/[0-9]{2}$/p' /path/to/file
Dejaré las explicaciones a continuación, que incluyen información sobre estos comandos, pero también funcionan con múltiples cadenas en líneas simples. Seguirán funcionando, pero incluirán código adicional potencialmente extraño.
grep
grep '[^ ]*[0-9]\{2\}( |$)' /path/to/file
Explicación
[^ ]*
Haga coincidir cualquier número de caracteres que no sean espacios.[0-9]\{2\}
Coincide con dos dígitos. (Podrías utilizarlo[0-9][0-9]
en su lugar).( |$)
Los dígitos deben ser el final de una "palabra", por lo tanto, deben ir seguidos de un espacio o de un terminador de fin de línea.
Prefiero usar grep extendido, ya que no necesitarás escapar de las llaves. Por eso,
grep -E '[^ ]*[0-9]{2}( |$)' /path/to/file
o
egrep '[^ ]*[0-9]{2}( |$)' /path/to/file
La pregunta ha sido editada, pero si hay varias coincidencias en una línea y desea generar solo las coincidencias, utilice la -o
bandera. es decir
egrep -o '[^ ]*[0-9]{2}( |$)' /path/to/file
sed
</path/to/file tr ' ' '\n' | sed -rn '/[0-9]{2}$/p'
Explicación
</path/to/file tr ' ' '\n'
Ingrese el archivo y cambie todos los espacios a nuevas líneas.sed -rn
Utilice expresiones regulares extendidas (similares a las anteriores) con-r
y no imprima todo el resultado inmediatamente con-n
.[0-9]{2}$
Esta expresión regular es similar a la anterior en la línea grep. Sin embargo, como ya hemos eliminado todos los espacios, no necesitamos definir los caracteres que no son espacios al principio, ni el posible espacio al final./<regex>/p
Imprime las líneas que coinciden<regex>
.
Respuesta2
sed
¡Además awk
debería funcionar!
sed 's/ /\n/g' file1 | awk '/[0-9][0-9]$/'
Sisu archivo contiene estas cadenaslinea por linea awk
¡Solo debería funcionar!
awk '/[0-9][0-9]$/' file1
Sidesea hacer coincidir cadenas que terminan enEXACTAMENTE dos números yno mas, luego use estos comandos en su lugar:
sed 's/ /\n/g' file1 | awk '/[^0-9][0-9][0-9]$/'
y
awk '/[^0-9][0-9][0-9]$/' file1
Producción:
adasfddfd09
dsassd90897
sdddsdf56
Explicación
sed
divide su cadena de entrada en varias cadenas.awk
coincide con todas las cadenas que terminan con exactamente dos números.