Comandos para grep y sed

Comandos para grep y sed

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 sedcon grepy 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 -obandera. 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 -rnUtilice expresiones regulares extendidas (similares a las anteriores) con -ry 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>/pImprime las líneas que coinciden <regex>.

Respuesta2

sed¡Además awkdeberí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

  • seddivide su cadena de entrada en varias cadenas.
  • awkcoincide con todas las cadenas que terminan con exactamente dos números.

información relacionada