Вы использовали «a *» в качестве шаблона поиска ... «*» означает ноль или БОЛЕЕ предыдущего символа, поэтому «bc» соответствует, имея в нуле или более «a».
На полусвязанной ноте я бы рекомендовал процитировать бит «a *», поскольку, если в текущем подкаталоге есть ЛЮБЫЕ файлы, начинающиеся с a, вы ОЧЕНЬ удивитесь, увидев, что вы действительно ищете,поскольку оболочка (bash, zsh, csh, sh, dash, wtfsh ...) автоматически выполнит раскрытие подстановочного знака ДО выполнения команды.
, если вы хотите найти строки, которые начинаются с 'a',затем вам нужно будет привязать шаблон поиска к начальному символу ^, чтобы ваш шаблон стал '^ a *', но, опять же, * означает ноль или более, так что это бесполезно в этой ситуации, когда у вас есть только одна буква... вместо этого используйте '^ a'.
В качестве надуманного примера, если вы хотите найти все строки, содержащие 'c', и строки, содержащие буквы 'bc', то вы можете использовать 'b * c'как шаблон поиска ... означает ноль или более б, а с.
Сила паттерна поиска регулярных выражений огромна и требует некоторого времени для поиска.Просмотрите man-страницы для grep (1), regex (7), pcre (3), pcresyntax (3), pcrepattern (3).
Как только вы освоите их, регулярные выражения полезны в sed,grep, perl, vim, (возможно, тоже emacs), ... э-э, уже поздно (рано?) больше ничего не приходит на ум, но они ОЧЕНЬ мощные.
Как бонус, '*' означаетНоль или больше, «+» означает ОДИН или больше, а «?»означает НОЛЬ или ОДИН.
Так что искать вещи с двумя или более а '...' аа + ', что составляет 1 а, и 1+ а (1 или более)
Я бродю.... (регулярное выражение (7)!)