Answers:
alias cgrep='grep -nR --color'
用法:
$ cgrep somestring /path/to/dir/or/file/with*/possible/*wild.card
也是我的最爱之一:
$ pgrep some-hanging-process
将列出与某些挂起进程名称匹配的所有进程的pid,您可以在以下情况下使用该进程:
$ kill $(pgrep some-hanging-process)
grep
,grep -r
通常应优先使用GNU ,grep -R
因为前者不会遍历符号链接。
我发现最好的方法是使用ack,这实际上是具有智能忽略列表的递归grep(例如,不搜索.svn目录,忽略备份文件等),对结果进行高亮显示和Perl正则表达式。您希望grep在98.6%的时间内执行此操作。
我在.bashrc中设置了它,而不是使用别名重新定义grep:
export GREP_OPTIONS="--color=auto"
对我来说,这适用于Linux,MacOSX和FreeBSD。
我建议避免使用环境变量GREP_OPTIONS,它将影响grep的每次调用,甚至包括嵌入在其他工具中的grep。如果这些工具期望grep表现出一种方式,而您改变了这种行为,它将并且确实破坏了这些工具。
相反,您可以创建一个效果很好的别名。这只会影响从您的交互式外壳程序对grep的调用(即您键入自己的名字)。
我最喜欢的最后一个选择是创建一个调用grep的包装器脚本。我更喜欢使用别名,因为我可以从其他程序调用此包装器。例如,通过设置vimgrep进入vim,以便在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主义,可能不适用于大多数人。毫无疑问,您将在工作时发展自己的特质。
'tags'是ctags的输出,我在'vim'等工具中使用了'tags'来定义函数。因此,它包含我的源代码中每个单词和符号的至少一个副本,因此值得从搜索结果中跳过。
最后的“ $ *”是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的所有脚本。