simples expressões grep

1

Eu tenho algumas expressões do grep que não estão funcionando como eu pretendia e não consigo descobrir por que.

A primeira expressão é encontrar linhas que começam e terminam com o mesmo caractere. Esta é a expressão que estou usando ...

grep -E '(.).*$' input

A segunda expressão é muito semelhante a encontrar linhas que tenham o mesmo segundo caractere e o segundo até o último caractere ...

grep -E '(.)(.).*.$' input

A última expressão é encontrar linhas com apenas uma palavra e terminar com uma pontuação ...

grep -E '(\w){1}.*[[:punct:]]$' input

Eu não entendo por que eles não estão funcionando, estou fazendo algo terrivelmente errado ou simplesmente um erro?

    
por mike 03.11.2017 / 01:35

1 resposta

4

Você deixou de fora da âncora ( símbolo de cursor ). Aqui estão os comandos modificados que correspondem apenas a linhas inteiras (e não combinam substrings):

grep -E '^(.).*$' input

grep -E '^(.)(.).*.$' input

grep -E '^(\w){1}.*[[:punct:]]$' input

Você provavelmente também desejará modificar seus segundo e terceiro comandos.

O segundo comando não exige dois grupos de captura . Você pode fazer isso com apenas um:

grep -E '^.(.).*.$' input

O terceiro comando está incorreto: ele irá combinar strings com várias palavras. Uma versão corrigida pode ser:

grep -E '^\w+[[:punct:]]$' input
    
por 03.11.2017 / 01:40