Filtrar caracteres idênticos consecutivos usando Sed e Grep

0

Como encontrar as ocorrências de três caracteres consecutivos e idênticos, por exemplo, "aaa", "bbb", etc., usando sed e grep ?

Eu pretendia descobrir palavras que tenham comprimento 3 e sejam feitas a partir de caracteres repetidos, ou seja, todos os caracteres da palavra devem ser iguais.

    
por user2280915 18.07.2015 / 20:30

2 respostas

2

Usando sed :

sed -n '/\(^\| \)\([A-Za-z]\)\($\| \)/p' file

Usando grep :

grep '\(^\| \)\([A-Za-z]\)\($\| \)' file
  • \(^\| \) : corresponde ao início da linha ou a ;
  • \([A-Za-z]\) : corresponde e agrupa qualquer caractere alfabético de letras maiúsculas ou minúsculas;
  • : corresponde ao caractere agrupado anteriormente;
  • : corresponde ao caractere agrupado anteriormente;
  • \($\| \) : corresponde ao final da linha ou a ;
~$ cat file
aa word word
word wordaaaword word
aAa word word
aaa word word
word bbb word
word word ccc
aaaa word word
~$ sed -n '/\(^\| \)\([A-Za-z]\)\($\| \)/p' file
aaa word word
word bbb word
word word ccc
~$ grep '\(^\| \)\([A-Za-z]\)\($\| \)' file
aaa word word
word bbb word
word word ccc
    
por kos 18.07.2015 / 21:43
1

Em uma situação como esta, prefiro a anotação (desculpe mudar a questão! <)

Em vez de encontrar, esta versão marca o padrão com "".

sed -r 's/(\w)/"&"/g; 
        s/"(..(\w))"//g'
  • s/(\w)/"&"/g; substitui ...aaa = > %código%
  • ..."aaa" corrige mais de 3 caracteres s/"(..(\w))"//g = > %código%

exemplo:

aa word wordaaaword word aAa word aaa word
word bbb word word ccc aaaa word word

saídas

aa word word"aaa"word word aAa word "aaa" word
word "bbb" word word "ccc" aaaa word word

Atualização (para lidar com os novos requisitos da pergunta):

sed -r 's/\<(\w)\>/"&"/g' ex1

saída:

aa word wordaaaword word aAa word "aaa" word
word "bbb" word word "ccc" aaaa word word
    
por JJoao 04.11.2015 / 10:57