Estou procurando uma expressão regular que encontre todas as ocorrências de caracteres duplos em um texto, uma listagem etc. na linha de comando (Bash).
Principal Pergunta : Existe uma maneira simples de olhar para seqüências como aa
, ll
, ttttt
, etc., onde se define uma expressão regular que procura n ocorrências da mesma personagem com? O que estou procurando é conseguir isso em um nível muito, muito básico. Na linha de comando. Em um shell Linux.
Depois de algumas pesquisas, cheguei às seguintes respostas - e perguntas resultantes delas; assim, elas me deram uma dica de onde a solução poderia estar. Mas:
a) (e) grep e a barra invertida
grep 'a\{2\}'
procuraaa
egrep'a{2}'
procuraaa
Pergunta: A necessidade de definir barras invertidas está realmente vinculada ao comando que eu uso? Nesse caso, alguém pode me dar uma dica do que mais deve ser levado em consideração ao usar o (e) grep aqui?
b) Encontrei esta resposta aqui para a minha pergunta, embora não seja exatamente o que eu estava procurando:
grep -E '(.)\1' filename
procura entradas com o mesmo caractere aparecendo mais de uma vez, mas não pergunta com que frequência . Isso é próximo do que estou procurando, mas ainda quero definir várias repetições.
Provavelmente devo dividir isso em duas ou mais perguntas, mas não quero inundar este site incrível aqui.
PS: Outra pergunta, possivelmente off topic, mas: é in
, inside
, at
ou on the shell
. E está on the command line
correto?
egrep
se precisar de expressões regulares (em vez de apenas uma correspondência simples de seqüências de caracteres) para não precisar me preocupar em lembrar as diferenças entregrep
os dois tipos de expressões regulares.grep '\(.\)\1\{3\}'
é padrão,grep -E '(.)\1{3}'
não é.Isso procuraria 2 ou mais ocorrências do mesmo caractere:
Se o seu awk tiver a opção -o, ele será impresso a cada partida em uma nova linha.
Para encontrar correspondências com exatamente 3 correspondências:
Ou 3 ou mais:
etc ..
editar
Na verdade, @stephane_chazelas está certa sobre as referências anteriores e -E. Eu tinha esquecido disso. Eu tentei no BSD grep e GNU grep e funciona lá, mas não está em outros greps. Você precisaria usar uma das versões abaixo ..
Versões regulares do grep:
A
-o
opção também não é o padrão grep BTW (provavelmente se o seu grep entender -o também pode fazer a referência traseira) ..Nota :
grep -E '(.)\1{2,}'
arquivo egrep '\(.\)\1\{2\}'
arquivo estão errados, como indicado por alexis, e devem ser ignorados.fonte
-E
opçãogrep
não faria muito? Isso explicaria bastante, por exemplo, por que perdi tanto tempo procurando onde estava errado!+
operador. Vou postar exemplos também.grep -E '(.)\1{2}'
não exatamente "Encontra correspondências com exatamente 3 correspondências". Embora corresponda exatamente a três caracteres idênticos, eles podem ser incorporados em uma sequência repetida mais longa; por exemplo, ele corresponderá na sequência de 5 símbolosAAAAA
. (E se houver 6 ou mais símbolos consecutivos, ele corresponderá mais de uma vez).Primeiro, obrigado a todos por seus comentários e sugestões. Acontece que eu já estava bem perto da resposta.
A questão principal era sobre:
Resposta curta :
Os seguintes comandos [variações de] repetirão
a
pelo menos uma e infinitas vezesgrep 'a\{1,}
grep -E \(a\)\{1,\}
egrep a{1,}
ou, com expressões regulares GNU disponíveis
grep a\+
O número de repetições é definido dentro dos colchetes, através do padrão
{min,max}
→{n}
repita exatamente asn
vezes,{n,}
repita pelo menosn
vezes e{n,m}
repita pelo menos,n
mas na maioria dasm
vezes.Assim, como conseqüência, levantou a questão secundária :
Resposta curta : Sim, o uso de barras invertidas depende se alguém usa
grep
ou nãoegrep
grep
: barra invertida ativa metacaracteres [usa expressões regulares básicas]egrep
barra invertida de -ativa metacharacters [usos Extensão expressões regulares]Como esta é a resposta curta, quero fornecer àqueles que tiveram problemas comparáveis. Adicionei meu resumo básico do que aparentemente alguém precisa estar ciente, trabalhando com
grep
eegrep
.Expressões regulares básicas, estendidas e GNU
Expressões regulares básicas
Usado em
grep
,ed
esed
comandoOs recursos do conjunto Expressões regulares básicas são:
? [ . \ )
etc., é ativada através de uma barra invertida. Se não houver barra invertida, elas serão consideradas como (parte do) termo de pesquisa.^ $ \<
e\>
são suportados sem uma barra invertida\b
,\s
, etc.]Expressões regulares básicas do GNU adicionam a esses
\?
repetição de caracteres zero ou uma vez (c\?
partidasc
ecc
) e é uma alternativa para\{0,1\}
\+
repetir um personagem pelo menos uma vez (c\+
correspondênciascc
,cccccccc
etc.) e é uma alternativa para\{1,\}
\|
é suportado (por exemplogrep a\|b
, procuraráa
oub
grep -E
permite que o comando use todo o conjunto de expressões regulares estendidas:Expressões regulares estendidas [ERE]
Usado em
egrep
,awk
eemacs
é o conjunto básico, além de alguns recursos.Expressões regulares do GNU Extendend
adiciona os seguintes recursos
Os dois links direcionarão um para o regular-expressions.info que, além do suporte impressionante que tenho aqui, realmente me ajudou muito.
fonte