
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 sed
com grep
e 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 -o
sinalizador. 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 -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 à 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>/p
Imprima as linhas correspondentes<regex>
.
Responder2
sed
plus awk
deve resolver o problema!
sed 's/ /\n/g' file1 | awk '/[0-9][0-9]$/'
Seseu arquivo contém essas stringslinha por linha awk
só 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
sed
divide sua string de entrada em várias strings.awk
corresponde a todas as strings que terminam com exatamente dois números.