Diferença entre o padrão grep ^ $ e ^

1

Eu entendo que o grep corresponde a todas as linhas em branco para o padrão ^$ . Mas o que significa apenas ^ ? Quando eu dei grep '^' filename , combinou todas as linhas.

Também grep '' filename corresponde a todas as linhas.

    
por user3539 28.03.2013 / 04:41

2 respostas

9

A página grep man explica os dois símbolos:

Anchoring
The caret ^ and the dollar sign $ are meta-characters that respectively match the empty string at the beginning and end of a line.

A pesquisa por ^ corresponde apenas ao início da linha, que todas as linhas possuem, para que todas correspondam. Procurar por uma string vazia não tem restrições, então também combina todas as linhas. A pesquisa por ^$ significa "corresponde ao início da linha seguido do final da linha", que é uma linha em branco. Você também pode usá-los para casos como encontrar todas as linhas que começam com foo ( ^foo ) ou todas as linhas que terminam com bar ( bar$ )

    
por 28.03.2013 / 05:20
3

^ é para o começo de uma linha.

^$ está dizendo o início de uma linha, o final de uma linha $ , sem nada entre os dois.

usando esta regex você pode encontrar linhas em branco e excluir / excluir linha em branco

por exemplo,

grep -Ev '^$|^#'  /etc/sudoers

Isso excluirá linha e linha em branco que são iniciadas a partir do hash (#)

    
por 28.03.2013 / 04:52