Procura uma string com os dois últimos caracteres como numérico

4

Suponha que eu tenha um arquivo como este:

adasfddfd09
dsassd90897
323sdsdsdsd
sdddsdf56
dfdf45fdfdf

Eu quero pesquisar apenas as cadeias com os últimos dois caracteres numéricos com sed , grep e awk .

    
por user130240 24.06.2014 / 16:15

2 respostas

6

Comandos para grep e sed

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

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

e

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

Deixarei as explicações abaixo, que incluem informações sobre esses comandos, mas também trabalho com várias strings em linhas simples. Eles ainda funcionarão, mas incluirão código adicional potencialmente estranho.

Grep

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

Explicação

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

Eu prefiro usar o grep estendido, já que você não precisará escapar das chaves. Portanto,

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 apenas exibir as correspondências, use o sinalizador -o . 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' Insira o arquivo e altere todos os espaços para novas linhas.
  • sed -rn Use expressões regulares estendidas (semelhantes às anteriores) com -r e não imprima toda a saída imediatamente com -n .
  • [0-9]{2}$ Esta expressão regular é semelhante à anterior na linha grep. No entanto, como já removemos todos os espaços, não precisamos definir os caracteres não espaciais no início nem o espaço possível no final.
  • /<regex>/p Imprime as linhas correspondentes a <regex> .
por 24.06.2014 / 16:34
4

sed plus awk deve fazer o truque!

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

Se o seu ficheiro contiver estas sequências linha por linha awk , só deve fazer o truque!

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

Se você quiser combinar strings que terminem com EXATAMENTE dois números e não mais , use os seguintes 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

  • sed divide sua string de entrada em várias strings.
  • awk corresponde a todas as strings que terminam com exatamente dois números.
por 24.06.2014 / 16:30

Tags