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).