Відповіді:
alias cgrep='grep -nR --color'
Використання:
$ cgrep somestring /path/to/dir/or/file/with*/possible/*wild.card
Також один із моїх улюблених:
$ pgrep some-hanging-process
перерахує всі підручники процесів, які відповідають імені якогось висячого процесу, який ви можете використовувати в наступній ситуації:
$ kill $(pgrep some-hanging-process)
grep, grep -rяк правило, слід віддавати перевагу над попередніми, grep -Rоскільки перша не перетинає символьні посилання.
Я виявив, що найкращим способом сутенера grep є використання ack , який по суті є рекурсивним grep із інтелектуальним списком ігнорування (наприклад, не шукає .svn каталогів, ігнорує резервні файли тощо), кольоровим виділенням результатів та пергельгепс. Це те, що ви хочете, щоб греп робив 98,6% часу.
Я встановив це у своєму .bashrc, замість того, щоб переглядати grep, використовуючи псевдонім:
export GREP_OPTIONS="--color=auto"
Для мене це працює на Linux, MacOSX та FreeBSD.
GREP_OPTIONSслід вважати шкідливим. Я рекомендую використовувати aliasзамість цього. Дивіться тут: bugs.launchpad.net/ubuntu/+bug/67141
Я рекомендую уникати змінної середовища GREP_OPTIONS, це вплине на кожен виклик grep, навіть на вбудовані в інші інструменти. Якщо ці інструменти очікують, що греп поводитиметься в один бік, а ви змінюєте таку поведінку, він буде і порушує ці засоби.
Натомість ви можете створити псевдонім, який добре працює. Це вплине лише на дзвінки з видаленням з інтерактивної оболонки (тобто, що ви самі вводите).
Останнім варіантом, який мені найбільше подобається, є створення сценарію обгортки, який викликає grep. Я віддаю перевагу цьому над псевдонімом, тому що я можу викликати цю обгортку з інших програм. Наприклад, vim, встановивши vimgrep, щоб мої пошуки зсередини vim поводилися однаково з пошуками в командному рядку.
$ cat `which grp`
#!/usr/bin/env bash
grep -rI --color --exclude-dir=\.bzr --exclude-dir=\.git --exclude-dir=\.hg --exclude-dir=\.svn --exclude-dir=build --exclude-dir=dist --exclude=tags $*
Закликайте це, використовуючи:
$ grp pattern dir
напр
$ grp pattern .
буде шукати екземпляри "шаблону" у всіх текстових файлах у поточному редакторі та підкаталогах.
Зауважте, що я називаю свій скрипт "grp", а не затіненням "grep", так що я завжди усвідомлюю, я посилаюсь на grep за допомогою своїх налаштованих налаштувань чи ні.
За замовчуванням я включаю:
-r : search subdirs recursive
-I : skip binary files
--color : highlight matches in color
--exclude-dir : skip specified directories and their subdirs
--exclude : skip specified files
Я думаю, кожен хотів би пропустити джерела управління джерелами: .hg .git .bzr .svn
Пропуск "build" та "dist" - це Python-isms, і, ймовірно, не стосується більшості людей. Без сумніву, ви будете розвивати власні ідіосинкразії під час роботи.
'теги' - це вихід ctags, який я використовую для 'переходу до визначення функції' тощо. в таких інструментах, як vim. Як такий, він містить принаймні одну копію кожного слова та символу з мого вихідного коду, тому його варто пропустити з результатів пошуку.
"$ *" в кінці - це синтаксис bash для "та всіх інших парам з командного рядка", тож ви можете перейти до шаблону та dir для пошуку як звичайного та замінити будь-які інші прапори командного рядка, які ви хочете .
Цей --colorпараметр вже згадувався кілька разів, але я хочу додати, що можна налаштувати колір, у якому відповідність буде виділятися за допомогою змінної середовища
export GREP_COLOR="1;33"
Колір повинен бути закодований за допомогою ANSI кольорів, для довідки
Black 0;30 Dark Gray 1;30
Blue 0;34 Light Blue 1;34
Green 0;32 Light Green 1;32
Cyan 0;36 Light Cyan 1;36
Red 0;31 Light Red 1;31
Purple 0;35 Light Purple 1;35
Brown 0;33 Yellow 1;33
Light Gray 0;37 White 1;37
GREP_COLORзастаріло. Використовуйте GREP_COLORSзамість цього.
Оскільки я не бачив прикладів насправді встановлення кольорів, ось проста установка для GNU grep:
# turn on colors, natch.
export GREP_OPTIONS="--color=auto"
if [[ $(echotc Co) -ge 256 ]]; then
# 256 color terminals
export GREP_COLORS="mt=38;5;118:sl=:cx=:fn=38;5;18:ln=1;30:bn=37:se=30"
else
# everybody else
export GREP_COLORS="mt=31:sl=:cx=:fn=34:ln=1;30:bn=30:se=30"
fi
Будьте уважні GREP_OPTIONS; не використовуйте його для чогось іншого, крім подібних речей, --color=autoабо це зіпсує будь-які сценарії, які використовують grep у вашій системі.