egrep expressão regular - mesma palavra no começo e no fim

5

Eu quero encontrar todas as linhas que têm a mesma palavra no começo e no final da linha.

Por exemplo:

goodword         fgdlakj 3t sfkl 43lk fkl goodword
bad sfa;lk3t   dgk;gs    34;kl bad334
singleword

Saída desejada

goodword         fgdlakj 3t sfkl 43lk fkl goodword
singleword

Meu código é:

egrep "(^.+)([ ]+.*)$"

funciona se a linha tiver mais de uma palavra. Mas eu quero uma linha contendo uma única palavra para combinar também.

Então eu tentei:

egrep "(^.+)($|([ ]+.*)$)"

e isso não funciona mais - e eu não sei porque.

    
por Silas2033 19.12.2015 / 11:00

3 respostas

7

Eu proponho usar awk :

awk '$1==$NF' file

A vantagem desta solução é que é muito mais simples de ler, e em segundo lugar você pode facilmente alterar o separador de campo (com -F opção), de modo que por exemplo. até mesmo o mesmo número de espaços no início e no final da linha corresponderá.

    
por 19.12.2015 / 11:20
7

Existe realmente boa resposta jimmij mas se você insistir em < strong> grep :

grep -Ex '(\S+)(.*)?' file
    
por 19.12.2015 / 12:18
3

Com um POSIX grep , um equivalente de awk '$1 == $NF' seria:

grep -x '[[:blank:]]*\([^[:blank:]]\{1,\}\)\([[:blank:]]\(.*[[:blank:]]\)\{0,1\}\)\{0,1\}[[:blank:]]*'
    
por 20.12.2015 / 00:11