Вы не получите никакого результата, потому что ваше регулярное выражение ^[^a]*$
(, которое должно быть заключено в одинарные кавычки, как и во второй попытке ), соответствует строкам, содержащим только не-a
символы (или пустые строки ), а ваша текстовая строка не пуста и содержит a
.
*
действует на предыдущее выражение, [^a]
в данном случае. [^a]*
будет соответствовать нулю или более символам, отличным от -a
. Поскольку вы привязываете выражение как к началу, так и к концу строки вокруг этого, оно отклоняет любую строку, содержащую букву a
.
Для grep
для строк, которые начинаются с чего-то, что не является a
, используйте
grep -r '^[^a]'.
Обратите внимание, что нет необходимости явно сопоставлять всю строку, но если вы хотите это сделать, используйте
grep -r '^[^a].*$'.
.*
соответствует нулю или более из любого символа (, включаяa
).
Чтобы также получить пустые строки в выводе (, они, очевидно, не начинаются сa
):
grep -r -v '^a'.
То есть сопоставьте a
в начале строки и инвертируйте смысл совпадения, используя -v
. Таким образом, вам вообще не нужны символы в строке (обратите внимание, что для соответствия [^a]
должен быть хотя бы один символ ), но если они есть, первый не должен быть a
.
Для поиска слов , которые не начинаются с a
, используйте
grep -r -w -o '[^a][[:alpha:]]*'.
Это выражение соответствует всему, что начинается с чего-либо, кроме a
, а затем продолжается нулем или более буквенными символами. Опция -w
для GNU grep
ограничивает совпадения словами, а опция -o
запрашивает grep
извлекать только совпадающие части из каждой строки.