grep命令

来源:互联网 发布:曼哈顿公寓知乎 编辑:程序博客网 时间:2024/06/18 00:39
grep
1.1   grep 查找文本内容

grep命令的一般形式为:

grep [命令选项]... 用于匹配的表达式 [文件]...

[options]主要参数:

-c:只输出匹配行的计数。                              ps -ef|grep -c svn
-i:不区分大 小写(只适用于单字符)。
-h:查询多文件时不显示文件名。
-l:查询多文件时只输出包含匹配字符的文件名。
-n:显示匹配行及 行号。
-s:不显示不存在或无匹配文本的错误信息。
-v:显示不包含匹配文本的所有行

pattern正则表达式主要参数:
\: 忽略正则表达式中特殊字符的原有含义。
^:匹配正则表达式的开始行。
$: 匹配正则表达式的结束行。
\<:从匹配正则表达 式的行开始。
\>:到匹配正则表达式的行结束。
[ ]:单个字符,如[A]即A符合要求 。
[ - ]:范围,如[A-Z],即A、B、C一直到Z都符合要求 。
。:所有的单个字符。
* :有字符,长度可以为0。


[root@www ~]# grep [-acinv] [--color=auto] '搜寻字符串' filename选项与参数:-a :将 binary 文件以 text 文件的方式搜寻数据-c :计算找到 '搜寻字符串' 的次数-i :忽略大小写的不同,所以大小写视为相同-n :顺便输出行号-v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行!--color=auto :可以将找到的关键词部分加上颜色的显示

实例:

将/etc/passwd,有出现 root 的行取出来

# grep root /etc/passwdroot:x:0:0:root:/root:/bin/bashoperator:x:11:0:operator:/root:/sbin/nologin或# cat /etc/passwd | grep root root:x:0:0:root:/root:/bin/bashoperator:x:11:0:operator:/root:/sbin/nologin
root 的行取出来,同时显示这些行在/etc/passwd的行号
# grep -n root /etc/passwd1:root:x:0:0:root:/root:/bin/bash30:operator:x:11:0:operator:/root:/sbin/nologin

从多个文件中查找关键词

           grep 'root' test.txt test2.txt

关键字所在行的前两行与后三行一起显示

     grep -n -A3 -B2 root /etc/passwd

颜色标注搜索关键词

     grep -n --color=auto 'root' /etc/passwd
显示包含ed或者at字符的内容行     grep -E  "ed|at"


在关键字的显示方面,grep 可以使用 --color=auto 来将关键字部分使用颜色显示。 这可是个很不错的功能啊!但是如果每次使用 grep 都得要自行加上 --color=auto 又显的很麻烦~ 用 alias 就得来处理一下! 在 ~/.bashrc 内加上这行: alias grep='grep --color=auto' 再以 source ~/.bashrc 来立即生效 这样每次运行 grep 他都会自动帮你加上颜色显示啦

 1.2 grep 正则 grep -n 't[ae]st' 123.txt #查找包含tast 和 test 的行 grep -n '[^g]oo' 123.txt #查找oo前不是g字符串 所在的行 grep -n '[^a-z]oo' 123.txt #查找oo前不是“小写字母”字符串 所在的行 grep -n '[0-9]' 123.txt #查找 包含数字0到9 的行 ^ 符号,在字符类符号(括号[])之内与之外是不同的! 在 [] 内代表『反向选择』在 [] 之外则代表定位在行首的意义!

grep '^the' 123.txt #查找 the开头 的行 grep ^u 123.txt  #找出已u开头的行内容  或者 cat 123.txt |grep ^u     grep ^[^u] 123.txt #输出非u开头的行内容 或者 cat 123.txt |grep ^[^u]  或 grep -v ^u 123.txt

 grep hat$ 123.txt                   #找出已hat结尾的行         grep -v hat$ test.txt               # 输出不是hat结尾的行内容                  grep '\.$' #找出以 . 结尾的行 (.有特殊含义 要用转义字符 ) grep '^$' #找出 空白行(只有行首和行尾

重复匹配:任意一个字节 .     重复字节 *这两个符号在正则表达式的意义如下:

. (小数点):代表『一定有一个任意字节』的意思;* (星号):代表『重复前一个字符, 0 到无穷多次』的意思,为组合形态
grep -n 'g..d'                   找出 g??d 的字串grep -n ' ooo*'                找出ooo、oooo、oooooo…… 等的字符串所在
grep -n 'g.*g'                   找出g开头 g结结尾的字符串所在行(中间无所谓)grep -n 'go\{2,5\}g'         找出两个g中间包含 2到5个o的字符串所在行

1.3 grep 查找内容 搜索文件 根据文件内容递归查找目录

# grep ‘ener’ *     #在当前目录搜索带'ener'行的文件  显示关键字所在行# grep -r ‘ener’ *  #在当前目录及其子目录下搜索'ener'行的文件  显示关键字所在行
# grep -l -r ‘energywise’ *     #在当前目录及其子目录下搜索'energywise'行的文件,                                  但是不显示匹配的行,只显示匹配的文件 #    grep abc *.txt                                当前目录下所有txt文件中 带有abc的行
      这几个命令很使用,是查找文件的利器。