zxhfighter
7/23/2014 - 3:17 PM

shell中的grep命令

shell中的grep命令

grep命令

grep,全局(global)正则表达式(regex)版本(pattern),允许对文本文件进行模式查找。如果找到匹配,打印所有包含模式的行。

基本语法

基本语法如下:

grep [option] ... PATTERN [FILE] ...

例如在menu.h和main.c文件中查找包含字符串"hello world"的行:

grep -i 'hello world' menu.h main.c

PATTERN为字符串(例如"hello world")和变量(例如"$myvar")时,应使用双引号;PATTERN为正则表达式时,应使用单引号。

grep选项

常用的grep选项有:

  • -c: 只输出匹配行的计数
  • -i: 不区分大小写的匹配
  • -n: 显示匹配行以及行号
  • -v: 显示不包含匹配文本

查询多个文件

grep ".action" *.js 或者 find -name dao.js | grep ".action"

显示所有不包含48的各行

grep -v "48" data.f

精确匹配单词48的行

grep '48\>' data.f

使用正则表达式的例子(关键是正则表达式的熟练程度)

模式范围:

grep '48[34]' data.f

不匹配行首:

grep '^[^48]' data.f

设置大小写:

grep -i 'sept' data.f | grep 483 或者 grep '[Ss]ept' data.f | grep 483

匹配任意字符:

grep '[A-Z][A-Z]..C' data.f

模式出现次数:

grep '6\{2,6}3' data.f

空行:

grep '^$' data.f

匹配特殊字符,例如$.'"*[]^|\+{}()等,需要在特殊字符前加''。

例如匹配包含"."的所有行:

grep '\.' data.f

管道

grep命令常常和管道符号|联合起来使用。

查询目录:

ls -l | grep '^d'

查询进程(例如查看DNS服务器是否正常运行),同时丢弃ps命令中的grep进程:

ps ax | grep "named" | grep -v "grep"

grep用于字符串变量

grep除了适用于文件,也适用于变量。

STR="HELLO WORLD" echo $STR | grep "HELLO"

总结

grep是一个很强大而流行的工具,如果要通过文件快速查找字符串或模式,是一个很好的选择。简单地说,grep是shell编程中很重要的工具,尤其在使用其他linux工具和进行变量替换时将发现这一点。