Então tente:
egrep "^\*\*" YOUR_FILE
Não se esqueça de usar aspas duplas.
Observação: use egrep
em vez de grep
.
Eu tenho um arquivo com linhas exclusivas que começam com 2 estrelas (**).
No entanto, quando eu executo um comando grep para
grep \*\* fileName
Eu obtenho todas as linhas no arquivo. Isso é muito incomum, e o que eu vejo como linhas não correspondentes não contém **.
Como eu escaparia do ** para as linhas corretas serem encontradas?
Você também pode conseguir a mesma coisa instruindo grep
de que a string a ser correspondida é uma string fixa. A mudança para fazer isso é -F
ou --fixed-strings
.
-F, --fixed-strings
Interpret PATTERN as a list of fixed strings, separated by
newlines, any of which is to be matched. (-F is specified by
POSIX.)
Então, algo assim fará:
$ grep -F "**" somefile.txt
$ cat somefile.txt
** blah
blahblah
** hi
Grepping o arquivo produz isso:
$ grep -F "**" somefile.txt
** blah
** hi
Em:
grep \*\* fileName
As barras invertidas são usadas para escapar do *
no shell (onde *
é um operador globbing).
O que o grep
recebe como segundo argumento é uma cadeia de dois caracteres: **
.
Como uma expressão regular, isso significa qualquer número (0 ou mais) de caracteres estelares , então basicamente corresponde a todos os lugares, pois também corresponde à string vazia, o que explica porque você obtém todas as linhas do arquivo.
Como *
é especial para grep
regex , , você precisa escapar também. O melhor é usar aspas simples em vez de barras invertidas para escapar de *
para o shell (porque aspas simples são citações de shell strongs que escapam de todos os caracteres, mas o caractere de aspas simples) e usam barras invertidas para escapar de *
para grep. Aspas duplas funcionariam bem nessa instância, mas cuidado com o fato de que as barras invertidas ainda são especiais para o shell entre aspas duplas.
Então:
grep '\*\*' somefile.txt
(com *
com escape, então eles não são mais operadores de regex, mas considerados como caracteres literais) retornaria as linhas de somefile.txt
que contêm uma sequência de caracteres de 2 estrelas. Se você quer que eles sejam encontrados apenas no começo da linha, você precisa usar o operador regex de ancoragem ^
:
grep '^\*\*' somefile.txt
Uma maneira alternativa de *
não ser considerada como um operador regex seria usar intervalos de caracteres:
grep '^[*][*]' somefile.txt
Uma maneira alternativa de especificar dois caracteres em estrela é escrevê-lo:
grep '^\*\{2\}' somefile.txt
(onde \{
é outro operador regex) que é mais fácil de ler se você usar expressões regulares estendidas como quando passar a opção -E
para grep
(evite egrep
como não é padrão):
grep -E '^\*{2}' somefile.txt
(em expressões regulares estendidas, {
é o operador regex).