Como vonbrand disse, -v
significa linhas de impressão que não correspondem ao padrão. Isso é melhor explicado pelo exemplo. Digamos que eu tenha um arquivo chamado foo.txt
cujo conteúdo é:
aaa
bbb
aabb
Então, vamos grep
para algumas strings no arquivo:
$ egrep 'a' foo.txt ## print lines that contain 'a'
aaa
aabb
$ egrep -v 'a' foo.txt ## print lines that do not contain 'a'
bbb
Agora, os regexes específicos que você postou realmente não fazem muito sentido sozinhos. Onde você achou eles? De qualquer forma, em muitos sabores de expressões regulares, \
escapa o próximo caractere, '\' é uma maneira de digitar um espaço em muitas conchas. Isso não é necessário ao usar o GNU grep
, mas '\ '
significa procurar por espaços. Por exemplo:
$ cat foo.txt
aaa
bb cc
$ grep '\ ' foo.txt
bb cc
$ grep ' ' foo.txt # same as the previous one, at least for GNU grep
bb cc
$ grep -v '\ ' foo.txt # print lines that do not contain spaces
aaa
|
significa OR lógico, ^
corresponde ao início de uma cadeia e $
corresponde ao final. Portanto, \ |^$
corresponderá a qualquer linha que contenha pelo menos um espaço ou uma linha vazia:
$ cat foo.txt
aaa
bbb
cc dd
$ egrep '\ |^$' foo.txt # print lines that are either empty, or have spaces
dd ee
$ egrep -v '\ |^$' foo.txt # print lines that are neither empty, nor have spaces
aaa
bbb
Os parênteses permitem que você capture um padrão:
Back References and Subexpressions
The back-reference \n, where n is a single digit, matches the
substring previously matched by the nth parenthesized
subexpression of the regular expression.
Eles não estão fazendo nada útil na expressão regular que você postou. Um exemplo de seu uso seria:
$ cat foo.txt
aaaa
aa bb
aabbccbb
$ egrep '(bb)..' foo.txt
aabbccbb
A expressão regular (bb)..
significa corresponder à string bb
, quaisquer dois caracteres ( ..
) e, em seguida, a string bb
novamente ( ).