语法:[root @test /root ]# grep [-acinv] '搜寻字符串' filenames-list
参数说明:
-a :将 binary 文件以 text 文件的方式搜寻数据
-c :计算找到 '搜寻字符串' 的次数
-i :忽略大小写的不同,所以大小写视为相同
-n :顺便输出行号
-v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行!
范例:
[root @test /root]# grep 'root' /var/log/secure
搜索 /var/log/secure 这个文件中包含 root 的行
[root @test /root]# grep -v 'root' /var/log/secure
搜索没有 root 的行
[root @test /root]# grep [A-Z]ANPATH /etc/man.config
说明:grep 是一个很常见的指令,最重要的功能就是进行字符串数据的比对了,需要说明的是『grep 在一个文件中查寻一个字符串时,他是以"整行"为单位来数据的撷取的!』
grep 是最简单的正规表示法搜寻指令之一,他并不支持一些更严谨的正规表示法内容,不过,已经相当的好用。
例题一:找出这个文件里面含有 know 这个字符,并将行号列出来:注意,大小写是不一样的
[root @test /root ]# grep -n 'know' regexp.txt
例题二:找出这个文件里面含有 * 这个字符,并将行号列出来:
[root @test /root ]# grep -n '\*' regexp.txt
例题三:我要将所有 know 不论大小写都列出来,并列出行号:
[root @test /root]# grep -ni 'know' regexp.txt
注意:类似的指令还有egrep、awk、gawk、sed等,将在后面详细说明
5 正规表示法的特殊字符(charaters)与 egrep 指令
特殊字符 表示意义
^word 待搜寻的字符在行首
word$ 待搜寻的字符在行尾
. 匹配任何一个可能的字符
\ 跳脱符号将特殊字符变成普通字符
? 任何一个『单一』字符
* 匹配模式中重复的字符
[list] 列表中的字符
[range] 列表中范围内的字符
[^list] 反向选择,与 [list] 相反
[^range] 反向选择,与 [range]相反
\{n\} 与前一个相同字浮连续 n 个
\{n,m\} 与前一个相同字浮连续 n-m 个
请特别留意的是,『正规表示法的特殊字符』与一般在指令列输入指令的『万用字符』并不相同,例如,在万用字符当中, * 代表的是 0 ~ 无限多个字符的意思,但是在正规表示法当中, * 则是重复前一个字符的意思~使用的意义并不相同,不要搞混了!
例题:在 /etc 底下,只要含有 XYZ 三个字符的任何一个字符的那一行就列出来
grep [XYZ] /etc/*
例题:我想要知道在 /etc 里面,只要句首是 w-z 的就将他印出来?
grep ^[w-z] /etc/*
6 diff比较两个文件内容是否有不一致的指令!
语法:[root @test /root ]# diff file1 file2
范例:[root @test /root]# diff index.htm index.html
例子:ls –l | grep ‘^d’ 查询子目录
正则表达式:
$ 锁定行的结束 如:’grep$’ 匹配所有以grep结尾的行
^ 锁定行的开始 如:^grep 匹配所有以grep开头的行
[] 匹配一个指定范围内的字符 如:’[Gg]rep’ 匹配grep或者Grep
[^] 匹配一个不在指定范围内的字符,如:’[^A-FH-Z]’匹配不包含A-R和T-Z的一个字母开头,后边紧跟rep
\(..\) 标记匹配字符,如’\(love\)’,love被标记为1
x\{m\} 重复字符x,m次,如:’0\{5\}’匹配包含5个0的行
x\{m,n\} 重复字符x,至少m次,如:’0\{5,10\}’匹配至少包含5个0的行
\w 匹配文字和数字字符,也就是[A-Za-z0-9],如’G\g*p’匹配以G或者g开头后边紧跟若干个字符然后紧跟p
搜索某一个字符串在当前目录并且子目录
grep 'string' * -R
od (octal dump)和 xd(hexdump)命令可以以十进制、八进制、十六进制和ASCII码来显示文件或者流,它们对于访问或可视地检查文件中不能直接显示在终端上的字符很有用。
语法:od [选项] 文件…
命令中各选项的含义:
- A 指定地址基数,包括:
d 十进制
o 八进制(系统默认值)
x 十六进制
n 不打印位移值
- t 指定数据的显示格式,主要的参数有:
c ASCII字符或反斜杠序列
d 有符号十进制数
f 浮点数
o 八进制(系统默认值为02)
u 无符号十进制数
x 十六进制数
除了选项c以外的其他选项后面都可以跟一个十进制数n,指定每个显示值所包含的字节数。