Linux grep 命令

2017-03-31|Categories: External cmd|

根据模式匹配筛选,而非按照字符筛选

grep默认是按照字符筛选,例如grep root /etc/passwd,就是在/etc/passwd文件中筛选root字符,如果需要筛选匹配某个模式的字符,必须打开-e选项。

例如,我想查看less命令的-S选项的用法,但man less内容太多,于是我可以通过grep筛选:

# 不加`-e`选项,grep会把要筛选的`-S`当做指定给自己的选项,但grep没有这个选项,所以报错
$ man less | grep '-S'
grep: invalid option -- 'S'
Usage: grep [OPTION]... PATTERN [FILE]...
Try 'grep --help' for more information.

# 添加`-e`之后,所有出现`-S`的行都被筛选出来
$ man less | grep -e '-S'
       ESC-SPACE
              mands.   While  the  text  is scrolled, it acts as though the -S
       -A or --SEARCH-SKIP-SCREEN
       -C or --CLEAR-SCREEN
       -G or --HILITE-SEARCH
       -Q or --QUIET or --SILENT
       -S or --chop-long-lines
       -U or --UNDERLINE-SPECIAL

# 通过「-e '^ *-S'」指定模式,只匹配「以空格开头,-S之前有0个或多个空格的行」
$ man less | grep -e '^ *-S'
       -S or --chop-long-lines

把中横线开头的字符当做筛选条件,而非grep的选项

man less | grep -- '-S'

--选项和-e选项类似,但没有那么强大,适合快速筛选man页面的选项。

不同的关键词使用不同的高亮颜色

GREP_COLOR="1;32" grep --color=always "http" /etc/services | GREP_COLOR="1;35" grep --color=always "tcp"
  • 如果GREP_COLORS(注意末尾有S)定义了相同的值,上面的例子将无法输出正确的颜色,必须提前用$ GREP_COLORS=清空该变量的值(GREP_COLOR已被废弃)。
  • 必须使用--color=always--color=auto无法输出正确的颜色。

http://stackoverflow.com/questions/17236005/grep-output-with-multiple-colors

具体的颜色代码参考下图:

https://misc.flogisoft.com/bash/tip_colors_and_formatting

链接的页面非常详细的介绍了如何在终端使用颜色、格式化输出。

显示完整文件,同时高亮关键词

命令模板:egrep 'pattern|$' file,示例:

man grep | egrep 'number|$'

关键在于|$。如果没有|$,只会输出包含关键词的行。

pattern|$的意思是:

  • 匹配所有符合pattern的行,同时
  • 匹配包含结束符(end of a line)的行——其实就是所有的行。

因为每行的结束符是「不可见(打印)字符」,所以只有pattern被高亮。

也可以省略$egrep "pattern|" file,但个人觉得不省略更直观。

http://stackoverflow.com/questions/981601/colorized-grep-viewing-the-entire-file-with-highlighted-matches

Leave A Comment