Почему grep
не работает правильно
Это не работает, потому что вы должны сказать grep
что .*
- это фактический шаблон, который вы ищете.
grep '.*' -c list3
Если вы не используете одинарные кавычки, ваша оболочка расширится .*
До имен каждого файла в вашем каталоге. Это называется расширением имени файла. Например, a.txt b.txt
, поэтому grep
увидит:
grep a.txt b.txt -c list3
Поскольку одинарные кавычки не позволяют расширению произойти, это путь сюда.
Где ваша команда grep
неверна:
Кстати, вы идете в неправильном направлении с узором здесь. Период .
в регулярном выражении соответствует любой символ, а не буквальная точка. Смотрите man
страницу для получения дополнительной информации. Итак, ваше регулярное выражение в настоящее время говорит: «найти любой символ, а затем последовательность любого символа». Совершенно излишним.
Если вы действительно хотите соответствовать:
[точка] [что-нибудь еще]
... вам нужно уйти от точки:
\.*
Где ваша команда find
может быть улучшена:
Я не знаю, что вы имеете в виду, чтобы избавиться от
\( ! -iname ".*" \)
Ваша команда find
префикс любого файла с точкой для текущего рабочего каталога, поэтому вы ничего не удалите здесь. Вы могли бы просто запустить:
find . -maxdepth 1 -type f