No es la cáscara
Ninguna de las respuestas hasta ahora ha tocado el problema real. Sería útil explicar por qué no funciona como espera.
grep -i "^**" test.out
Debido a que usted ha citado el patrón de grep , *
está no expandido en la cáscara. Se pasa a grep como está. Esto se explica en la página del manual [1] para bash [2] :
El encerrar caracteres entre comillas dobles conserva el valor literal de todos los caracteres dentro de las comillas, con la excepción de $, `, \ y, cuando la expansión del historial está habilitada,!.
Es regular expresiones regulares ordinarias
Una expresión regular es un patrón que describe un conjunto de cadenas.
*
Es uno de los patrones clave en las expresiones regulares. Por defecto, grep lo interpreta de la siguiente manera:
* The preceding item will be matched zero or more times.
Esto significa que su patrón tal como está, ^**
no tiene mucho sentido. Posiblemente trata de hacer coincidir el comienzo de la línea cero o más veces , dos veces. Lo que sea que eso signifique.
La solución es citarlo :
Cualquier meta-carácter con significado especial puede ser citado precediéndolo con una barra invertida.
grep -i "^\*\*" test.out
[1] No recomiendo leerlo. Por favor, use man dash
o similar en su lugar.
[2] No se dio ningún shell, así que supongo que bash .
*
no necesita escapar en este caso particular, fwiw.