Предположим, я хочу написать строку, которая выводит строки, соответствующие определенной строке, без повторения дубликатов строк. Я хочу найти эту строку в файлах текущего каталога:
grep mystring ***What to put here?** | sort | uniq
Как выполнить поиск во всех файлах текущего каталога?
решение1
find . ! -name . -prune -type f -exec cat {} + |
grep mystring |
LC_ALL=C sort -u
Или:
find . ! -name . -prune -type f -exec cat {} + | awk '
/mystring/ && !seen[$0]++'
С GNU grep
:
LC_ALL=C grep -hr --exclude-dir='?*' mystring | LC_ALL=C sort -u
Или с помощью zsh
и GNU grep
:
grep -h mystring ./*(D.) | LC_ALL=C sort -u
Чтобы также выполнить рекурсивный поиск в файлах в подкаталогах:
find . -type f -exec cat {} + |
grep mystring |
LC_ALL=C sort -u
Или:
find . -type f -exec cat {} + | awk '
/mystring/ && !seen[$0]++'
С GNU grep
:
grep -hr mystring | LC_ALL=C sort -u
Обратите внимание, что все эти решения также просматривают скрытые файлы (и файлы внутри скрытых каталогов), но не нестандартные файлы и не будут переходить по символическим ссылкам (если только вы не используете какую-то старую версию GNU grep
с -r
).