linux命令详解(28)用 grep 搜索文本,grep命令详解

2015-1-13 19:36:50     28 人阅读    

需要在文件中执T行更高T级T的字符串搜索T时,自然会想到TgrepT命令。实际上,grepT一把T业已成 为计算机行话里的动词,正如GoogleT一下T已经成了口头禅。下面是几个使用TgrepT命令的示例:

$ grep francois myfile.txt 显示包含francois的文本行
# grep 404 /var/log/httpd/access_log 显示包含404的文本行
$ ps auwx | grep init 显示包含init的ps命令输出行
$ ps auwx | grep "\[*\]" 显示方括号括住的命令
$ dmesg | grep "[ ]ata\|^ata" 显示ata内核设备信息


这些命令行不光是TgrepT命令的用法示例,还具有特定作用。搜索Taccess_logT文件里的T404T, 可以查看web服务器的哪些页面请求无应答,即这些页面找不到(可能有人滥用你的系统,或是 web页面位置变动或忘了创建)。显示Tps命令T输出里方括号括住的命令,可以找出TpsT无法显示其选 项的命令。最后一个命令会检查内核环形缓冲链表,查找硬盘和CD-ROM光驱等ATA设备信息。


①T  即按前面Shift+f快捷键后进入的模式。——译者注


此外,TgrepT命令还能递归T搜索若干或大量文件T。下面的命令会递归搜索T/etc/httpd/confT和

/etc/httpd/conf.dT目录下的所有文件,查找字符串TVirtualHostT:
$ grep -R VirtualHost /etc/httpd/conf*
使用TgrepT命令时添加行号(T-nT)可以找出搜索目标具体所在行:
$ grep -Rn VirtualHost /etc/httpd/conf*
加上--colorT选项,搜索结果中的检索词可显示为彩色:
# grep --color -Rn VirtualHost /etc/httpd/conf*
默认情况下,搜索多个文件时,每条搜索结果都会显示对应的文件名。使用T-hT选项可以不再 显T示文件名T。下面的示例在TsecureT、Tsecure.1T和Tsecure.2T等文件里搜索字符串TsshdT:
# grep -h sshd /var/log/secure*
搜索messages文件时不想区分大小写,加上T-iT选项即可:
# grep -i selinux /var/log/messages 在文件中搜索selinux(不限大小写)
加T-lT选项可以只显T示包含T检T索T词T的文件名T:
$ grep -Rl VirtualHost /etc/httpd/conf*
加T-vT选项可显示与搜索字符串不匹配的所有行:
# grep –v "200" /var/log/httpd/access_log* 显示不包含200的行


T注意T                TpsT命令输出用管道传入TgrepT时,利用下面的小技巧,Tgrep搜索结果里就不会再出现grepT进
程:
# ps auwx | grep "[i]nit"

 

1. 用TwcT检查字数
有时用户需要知道匹配搜索字符串的行数。TwcT命令可以计T算搜索T结T果的行数T。例如,下面的 命令行搜索Apache日志文件,统计来自指定IP地址的访问量:

$ grep 192.198.1.1 /var/log/httpd/access-log | wc -l
TwcT命令还有其他用途,默认情况下,TwcT会列印文件的行数、字数和字节T数T:
$ wc /etc/httpd/conf.d/README 列出单个文件的计数
9 58 392 /etc/httpd/conf.d/README
$ wc /etc/httpd/conf.d/* 列出各个文件的计数及所有文件的总计数
List single/totals for many files
20 83  566 /etc/httpd/conf.d/proxy_ajp.conf
9 58  392 /etc/httpd/conf.d/README
11 45  299 /etc/httpd/conf.d/welcome.conf 40  186 1257 total

2. 用TsortT对输出排序
有时对T文件内容或命令T输T出排序T用处很大,可以将凌乱的输出整理得井井有条。下面的例子 会列出所有已安装RPM包的名称,抓取名称里包含kernel的输出,并按字母数字序对结果排序(正

序和逆序):

$ rpm -qa | grep kernel | sort 按字母数字顺序排序
$ rpm -qa | grep kernel | sort -r 按字母数字逆序排序

下面的命令会按内存使用从大到小对进T程排序(T
ps命令输出的第4个字段)。选项T-kT指定用于

排序的关键字段。T4,4T表示以第4个且只以第4个字段作为关键字段。
$ ps auwx | sort –r –k 4,4
下面的命令行会按大小降序排列已加载T内核模T块。选项Tn指示sortT将第2个字段作为数字而非 字符串处理:
# lsmod | sort -k 2,2n


3. 用TstringsT查找二进制文件里的文本
有时,你需要读取二进制文件里的ASCII文本。偶尔还可以借此了解可执行文件的大量细节。 针对这些情形,可以使用binutils包的TstringsT提取所有可读ASCII文本,示例如下:

$ strings /bin/ls | grep -i libc 查找ls中包含libc的字符串
$ cat /bin/ls | strings 列出ls中所有ASCII文本
$ strings /bin/ls 列出ls中所有ASCII文本

上面运行的file命令表明,bash shell提供了多种格式的文档文件。


原文地址:http://www.itmmd.com/201501/487.html
该文章由 萌萌的IT人 整理发布,转载须标明出处。

  上一篇
下一篇  linux命令详解(27)用 pr 给文本文件标上页码,rpm pr命令详解

精彩回复
发表评论
姓名:       

《程序员app》专门为程序员量身定做!