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/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin 或 # cat /etc/passwd | grep root root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologinroot 的行取出来,同时显示这些行在/etc/passwd的行号
# grep -n root /etc/passwd 1:root:x:0:0:root:/root:/bin/bash 30: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的行
这几个命令很使用,是查找文件的利器。