Existe algo no grep semelhante ao que * está na substituição de nomes de arquivos?

-1

Preciso encontrar todas as linhas que começam com uma letra maiúscula e terminam com a palavra dog seguido por um ponto.

Eu sei que para encontrar linhas começando com uma letra maiúscula eu faria: egrep ^ [A-Z] nome do arquivo

E para encontrar linhas que terminem com "cachorro". Eu faria: egrep dog. $ filename

No entanto, como eu faria os dois juntos? Eu tentei: egrep ^ [A-Z] * dog. $ filename

mas parece não funcionar. Na substituição do nome do arquivo, o caractere * representou uma string de qualquer tamanho, ou nenhuma string sequer.

    
por John Stacen 28.09.2013 / 13:23

2 respostas

4

Você provavelmente precisará disso:

grep '^[[:upper:]].*dog\.$' file

Você provavelmente já conhece as âncoras ^ (para o início da linha) e $ (para o final da linha). Em vez de usar [A-Z] , é melhor usar a classe [[:upper:]] , pois isso pode lidar melhor com letras maiúsculas acentuadas (lembre-se, se sua pergunta é para lição de casa, seu professor pode não estar ciente disso - minha experiência é que os cursos de linha de comando nas escolas é um dos piores ensinamentos que existem, os professores geralmente são incompetentes nisso, pois usam técnicas antigas ... (maus) hábitos são difíceis de morrer!).

Então, você está procurando .* , em que o período . corresponde a qualquer caractere e, em seguida, .* significa qualquer número de qualquer caractere.

Finalmente, você precisa de um período de escape \. , caso contrário, uma linha que termina com dogs ou dog! corresponderia ... já que um período sem escape corresponde a qualquer caractere.

Espero que isso ajude!

    
por gniourf_gniourf 28.09.2013 / 13:50
0

Você precisa escrever o seguinte padrão: [A-Z]. * Cachorro.

[A-Z] espera uma letra maiúscula ponto significa que é qualquer personagem. A maneira como você tem o '*' significa que tantas letras maiúsculas. Se você quiser caracteres alfabéticos, em vez de '.' coloque [a-z]. A estrela não funciona como um caractere curinga como na linha de comando do bash, mas leva em conta o caractere anterior.

Espero que isso tenha sido útil

    
por Vasilis Nicolaou 28.09.2013 / 13:47