Linux 命令 - grep: 正则搜索文本

grep 搜索文本文件中与指定正则表达式匹配的行

 

命令格式

grep [OPTIONS] PATTERN [FILE...]

 

命令参数

Generic Program Information

--help
  打印帮助信息

-V, --version
  打印版本信息

Matcher Selection

-E, --extended-regexp
  使用基本正则表达式(ERE)解释 PATTERN

-F, --fixed-strings
  每个模式作为一组固定字符串对待(以新行分隔),而不作为正则表达式。

-G, --basic-regexp
  使用基本正则表达式(BRE)解释 PATTERN

-P, --perl-regexp
  使用 Perl 正则表达式(PCRE)解释 PATTERN

Matching Control

-e PATTERN, --regexp=PATTERN
  使用 PATTERN 作为匹配模式

-f FILE, --file=FILE
  从文件获取匹配模式

-i, --ignore-case
  忽略大小写

-v, --invert-match
  输出不含匹配项的行

-w, --word-regexp
  单词精确匹配

-x, --line-regexp
  行精确匹配

General Output Control

-c, --count
  输出匹配项的数目

-l, --files-with-matches
  输出包含匹配项的文件名而不是直接输出匹配行

-L, --files-without-match
  与 -l 选项类似,输出的是包含不匹配项的文件名

-m NUM, --max-count=NUM
  当匹配 NUM 后停止读取文件

-o, --only-matching
  只显示匹配项而不是匹配行

-q, --quiet, --silent
  安静模式,不显示任何信息

-s, --no-messages
  当文件不存在或不可读时,不显示错误信息

Output Line Prefix Control

-b, --byte-offset
  在每个匹配行前加上该行在文件内的块号

-H, --with-filename
  在每个匹配行前加上文件名

-h, --no-filename
  多文件搜索时,抑制文件名输出

-n, --line-number
  在每个匹配行前加上该行在文件内的行号

Context Line Control

-A NUM, --after-context=NUM
  输出匹配行及其后 NUM 行的内容

-B NUM, --before-context=NUM
  输出匹配行及其前 NUM 行的内容

-C NUM, -NUM, --context=NUM
  输出匹配行及其前后 NUM 行的内容

 

实例

测试文件 test.txt:

The Zen of Python, by Tim Peters



Beautiful is better than ugly

Explicit is better than implicit

Simple is better than complex

Complex is better than complicated

Flat is better than nested

Sparse is better than dense

Readability counts

Special cases aren't special enough to break the rules

Although practicality beats purity

Errors should never pass silently

Unless explicitly silenced

In the face of ambiguity, refuse the temptation to guess

There should be one-- and preferably only one --obvious way to do it

Although that way may not be obvious at first unless you're Dutch

Now is better than never

Although never is often better than *right* now

If the implementation is hard to explain, it's a bad idea

If the implementation is easy to explain, it may be a good idea

Namespaces are one honking great idea -- let's do more of those

 a) 输出含有 "com" 的行

huey@huey-K42JE:~/huey/linux/cmdline$ grep com test.txt

Simple is better than complex

Complex is better than complicated

b) 匹配时忽略大小写

huey@huey-K42JE:~/huey/linux/cmdline$ grep -i com test.txt

Simple is better than complex

Complex is better than complicated

 c) 输出以 "complex" 开头的行,忽略大小写

huey@huey-K42JE:~/huey/linux/cmdline$ grep -i '^complex' test.txt

Complex is better than complicated

 d) 输出以 "idea" 结尾的行

huey@huey-K42JE:~/huey/linux/cmdline$ grep 'idea$' test.txt

If the implementation is hard to explain, it's a bad idea

If the implementation is easy to explain, it may be a good idea

e) 匹配空行

huey@huey-K42JE:~/huey/linux/cmdline$ grep -n '^$' test.txt

2:

h) 输出含有 "good" 或 "bad" 的行

huey@huey-K42JE:~/huey/linux/cmdline$ grep 'good\|bad' test.txt

If the implementation is hard to explain, it's a bad idea

If the implementation is easy to explain, it may be a good idea

huey@huey-K42JE:~/huey/linux/cmdline$ grep -E 'good|bad' test.txt

If the implementation is hard to explain, it's a bad idea

If the implementation is easy to explain, it may be a good idea

i) 精确匹配单词 it,像 implicit、purity、purity 等这样的单词中的 it 部分是不会被匹配的

huey@huey-K42JE:~/huey/linux/cmdline$ grep -w it test.txt

There should be one-- and preferably only one --obvious way to do it

If the implementation is hard to explain, it's a bad idea

If the implementation is easy to explain, it may be a good idea

j) 输出含有 "Python" 的行及其后 3 行

huey@huey-K42JE:~/huey/linux/cmdline$ grep -A 3 Python test.txt

The Zen of Python, by Tim Peters



Beautiful is better than ugly

Explicit is better than implicit

 

相关命令

egrep - 相当于 grep -E

fgrep - 相当于 grep -F

pgrep - 相当于 grep -P

你可能感兴趣的:(linux 命令)