Это не оболочка
Ни один из ответов до сих пор не коснулся настоящей проблемы. Было бы полезно объяснить, почему это не работает так, как вы ожидаете.
grep -i "^**" test.out
Поскольку вы процитировали шаблон для grep , *
он не раскрывается оболочкой. Он передается в grep как есть. Это объясняется на странице руководства [1] для bash [2] :
Заключение символов в двойные кавычки сохраняет буквальное значение всех символов в кавычках, за исключением $, `, \ и, когда расширение истории включено,!.
Это обычные регулярные выражения
Регулярное выражение - это шаблон, который описывает набор строк.
*
является одним из ключевых шаблонов в регулярных выражениях. По умолчанию grep интерпретирует это следующим образом:
* The preceding item will be matched zero or more times.
Это означает, что ваш шаблон в его нынешнем виде ^**
не имеет особого смысла. Возможно, он пытается найти начало строки ноль или более раз , дважды. Что бы это ни значило.
Решение состоит в том, чтобы процитировать это:
Любой метасимвол со специальным значением может быть заключен в кавычки, если ему предшествует обратная косая черта.
grep -i "^\*\*" test.out
[1] Я не рекомендую читать это. Пожалуйста, используйте man dash
или аналогичные.
[2] Оболочки не было дано, поэтому я предполагаю, что bash .
*
не нужно бежать в данном конкретном случае, FWIW.