Comandos para grep e sed

Comandos para grep e sed

Suponha que eu tenha um arquivo como este:

adasfddfd09
dsassd90897
323sdsdsdsd
sdddsdf56
dfdf45fdfdf

Quero pesquisar apenas as strings que possuem os dois últimos caracteres numéricos sedcom grepe awk.

Responder1

Comandos para grep e sed

Parece que a pergunta original foi formatada incorretamente. Portanto, os comandos grep e sed mais simples são:

egrep '[0-9]{2}$' /path/to/file

e

sed -rn '/[0-9]{2}$/p' /path/to/file

Deixarei abaixo as explicações, que incluem informações sobre esses comandos, mas também funcionam com múltiplas strings em linhas únicas. Eles ainda funcionarão, mas incluirão código adicional e potencialmente estranho.


Grep

grep '[^ ]*[0-9]\{2\}( |$)' /path/to/file

Explicação

  • [^ ]*Combine qualquer número de caracteres que não sejam espaços.
  • [0-9]\{2\}Combine dois dígitos. (Você poderia usar [0-9][0-9]em vez disso.)
  • ( |$)Os dígitos devem ser o final de uma "palavra", portanto devem ser seguidos por um espaço ou por um terminador de fim de linha.

Eu prefiro usar grep estendido, pois você não precisará escapar das chaves. Por isso,

grep -E '[^ ]*[0-9]{2}( |$)' /path/to/file

ou

egrep '[^ ]*[0-9]{2}( |$)' /path/to/file

A pergunta foi editada, mas se houver várias correspondências em uma linha e você quiser gerar apenas as correspondências, use o -osinalizador. ou seja

egrep -o '[^ ]*[0-9]{2}( |$)' /path/to/file

Sed

</path/to/file tr ' ' '\n' | sed -rn '/[0-9]{2}$/p'

Explicação

  • </path/to/file tr ' ' '\n'Arquivo de entrada e altere todos os espaços para novas linhas.
  • sed -rnUse expressões regulares estendidas (semelhantes às anteriores) com -re não imprima toda a saída imediatamente com -n.
  • [0-9]{2}$Esta expressão regular é semelhante à acima na linha grep. Porém, como já removemos todos os espaços, não precisamos definir os caracteres que não sejam espaços no início, nem o possível espaço no final.
  • /<regex>/pImprima as linhas correspondentes <regex>.

Responder2

sedplus awkdeve resolver o problema!

sed 's/ /\n/g' file1 | awk '/[0-9][0-9]$/'

Seseu arquivo contém essas stringslinha por linha awksó deve fazer o truque!

awk '/[0-9][0-9]$/' file1

Sevocê deseja combinar strings que terminam comEXATAMENTE dois números enão maise use estes comandos:

sed 's/ /\n/g' file1 | awk '/[^0-9][0-9][0-9]$/'

e

awk '/[^0-9][0-9][0-9]$/' file1

Saída:

adasfddfd09
dsassd90897
sdddsdf56 

Explicação

  • seddivide sua string de entrada em várias strings.
  • awkcorresponde a todas as strings que terminam com exatamente dois números.

informação relacionada