Ответы:
alias cgrep='grep -nR --color'
Использование:
$ cgrep somestring /path/to/dir/or/file/with*/possible/*wild.card
Также один из моих любимых:
$ pgrep some-hanging-process
перечислит все pids процессов, которые соответствуют имени некоторого зависшего процесса, который вы можете использовать в следующей ситуации:
$ kill $(pgrep some-hanging-process)
grep
, grep -r
как правило , следует отдавать предпочтение перед тем, grep -R
как первый не пересекает символические ссылки.
Я обнаружил, что лучший способ для pimp grep - это использовать ack , который по сути является рекурсивным grep с интеллектуальным списком игнорирования (например, не выполняет поиск в каталогах .svn, игнорирует файлы резервных копий и т. Д.), Выделяет цветом результаты и Perl регулярные выражения Это то, что вы хотите, чтобы grep делал 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 будет вести себя одинаково, и вы измените это поведение, оно сломает эти инструменты.
Вместо этого вы можете создать псевдоним, который хорошо работает. Это повлияет только на вызовы 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 .
будет искать экземпляры '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-измы, и, вероятно, они не применимы к большинству людей. Без сомнения, вы будете развивать свои собственные особенности во время работы.
'tags' - это вывод 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 в вашей системе.