Linux 三大文本处理命令之一GREP
来源:互联网 发布:网络与新媒体 好就业吗 编辑:程序博客网 时间:2024/06/05 19:11
grep,全称global search regular expression(RE) and print out the line。是一种强大的文本搜索工具,根据正则表达式,把匹配的行输出。Unix的grep家族包括grep、egrep和fgrep。egrep和fgrep的命令只跟grep有很小不同。egrep是grep的扩展,支持更多的re元字符, fgrep就是fixed grep或fast grep,它们把所有的字母都看作单词,也就是说,正则表达式中的元字符表示回其自身的字面意义,不再特殊。linux使用GNU版本的grep。它功能更强,可以通过-G、-E、-F命令行选项来使用egrep和fgrep的功能。
这里对GREP的常用用法做一个介绍。
一 定义
[root@www ~]# grep [-acinv] [--color=auto] '搜寻字符串' filename-aiinv通常有:-a:将二进制文件以text文件的方式搜索-c:计算匹配的次数-i:忽略大小写的不同-n:显示所在行号-v:显示没有所要搜索字符串的行-r:迭代查询,即在该目录及子目录下搜索--color=auto:将找到的关键词显色例如:
将/etc/passwd里有出现root的行取出:
yan@ysw:~/桌面$ grep root /etc/passwdroot:x:0:0:root:/root:/bin/bash将/etc/passwd,将没有出现 root 的行取出来,并显示行号:
还有就是与dmesg配合使用,这里先简单介绍一下dmesg:
dmesg定义:
dmesg [ops]主要有7种应用:
1 列出加载到内存的所有驱动
使用如‘more’。 ‘tail’, ‘less ’或者‘grep’文字处理工具来处理‘dmesg’命令的输出。由于dmesg日志的输出不适合在一页中完全显示,因此我们使用管道(pipe)将其输出送到more或者less命令单页显示:
用 dmesg 列出核心信息,再以 grep 找出内含 eth 那行:
yan@ysw:~/桌面$ dmesg | grep -n 'eth'858:[ 2.697003] e1000e 0000:00:19.0 eth0: registered PHC clock859:[ 2.697006] e1000e 0000:00:19.0 eth0: (PCI Express:2.5GT/s:Width x1) f8:b1:56:ab:47:58860:[ 2.697007] e1000e 0000:00:19.0 eth0: Intel(R) PRO/1000 Network Connection861:[ 2.697041] e1000e 0000:00:19.0 eth0: MAC: 10, PHY: 11, PBA No: 1011FF-0FF862:[ 2.697580] e1000e 0000:00:19.0 eno1: renamed from eth0
2 列出所有被检测到的硬件:
yan@ysw:~/桌面$ dmesg | grep -n 'eth'858:[ 2.697003] e1000e 0000:00:19.0 eth0: registered PHC clock859:[ 2.697006] e1000e 0000:00:19.0 eth0: (PCI Express:2.5GT/s:Width x1) f8:b1:56:ab:47:58860:[ 2.697007] e1000e 0000:00:19.0 eth0: Intel(R) PRO/1000 Network Connection861:[ 2.697041] e1000e 0000:00:19.0 eth0: MAC: 10, PHY: 11, PBA No: 1011FF-0FF862:[ 2.697580] e1000e 0000:00:19.0 eno1: renamed from eth0yan@ysw:~/桌面$ dmesg | grep sda[ 2.311489] sd 0:0:0:0: [sda] 976773168 512-byte logical blocks: (500 GB/466 GiB)[ 2.311491] sd 0:0:0:0: [sda] 4096-byte physical blocks[ 2.311743] sd 0:0:0:0: [sda] Write Protect is off[ 2.311746] sd 0:0:0:0: [sda] Mode Sense: 00 3a 00 00[ 2.311917] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA[ 2.387520] sda: sda1 sda2 < sda5 sda6 sda7 sda8 sda9 sda10 >[ 2.388439] sd 0:0:0:0: [sda] Attached SCSI disk[ 3.709304] EXT4-fs (sda8): mounted filesystem with ordered data mode. Opts: (null)[ 8.366431] EXT4-fs (sda8): re-mounted. Opts: errors=remount-ro[ 11.281038] Adding 780284k swap on /dev/sda9. Priority:-1 extents:1 across:780284k FS[ 12.333149] EXT4-fs (sda10): mounted filesystem with ordered data mode. Opts: (null)[ 12.604467] EXT4-fs (sda7): mounted filesystem with ordered data mode. Opts: (null)注解 ‘sda’表示第一块 SATA硬盘,‘sdb’表示第二块SATA硬盘。若想查看IDE硬盘搜索‘hda’或‘hdb’关键词。
3 只输出dmesg命令输出的前20行:
yan@ysw:~/桌面$ dmesg | head -204 只输出dmesg命令输出的最后20行:
yan@ysw:~/桌面$ dmesg | tail -205 搜索特定字符串的设备:
包含‘usb’ ‘dma’ ‘tty’ ‘memory’等字符串的日志行:
yan@ysw:~/桌面$ dmesg | grep -i memory6 清空dmesg缓存:
yan@ysw:~/桌面$ dmesg -C7 实时监控dmesg
yan@ysw:~/桌面$ watch "dmesg | tail -20"二 与正则表达式结合的GREP
通过例子说明:
先在桌面建立一个a.txt,里面内容:
"Open Source" is a good mechanism to develop programs.apple is my favorite food.Football game is not use feet only.this dress doesn't fit me.However, this dress is about $ 3183 dollars.I can't finish the test.Oh! The soup taste good.motorcycle is cheap than car.This window is clear.the symbol '*' is represented as start.The gd software is a library for drafting programs.You are the best is mean you are the no. 1.The world <Happy> is the same with "glad".I like dog.google is the best tools for search keyword.goooooogle yes!go! go! Let's go.1 搜索出现“t?xt”字符串的行,?表示任意一个或多个字符:
2 字符类的反向选择 [^] :如果想要搜索到有 oo 的行,但不想要 oo 前面有 g:
3 字符类的连续:再来,假设我 oo 前面不想要有小写字节:
yan@ysw:~/桌面$ grep -n '[^a-z]oo' a.txt 3:Football game is not use feet only.当我们在一组集合字节中,如果该字节组是连续的,例如大写英文/小写英文/数字等等, 就可以使用[a-z],[A-Z],[0-9]等方式来书写,那么如果我们的要求字串是数字与英文将他全部写在一起,变成:[a-zA-Z0-9]。
例如要包含数字的行:
yan@ysw:~/桌面$ grep -n '[0-9]' a.txt 5:However, this dress is about $ 3183 dollars.15:You are the best is mean you are the no. 1.
4 行首字符:如果我想要让 the 只在行首列出:
再例如只要开头是小写字母的行:
yan@ysw:~/桌面$ grep -n '^[a-z]' a.txt 2:apple is my favorite food.4:this dress doesn't fit me.10:motorcycle is cheap than car.12:the symbol '*' is represented as start.18:google is the best tools for search keyword.19:goooooogle yes!20:go! go! Let's go.如果不要开头是字母的行:
yan@ysw:~/桌面$ grep -n '^[^a-zA-Z]' a.txt 1:"Open Source" is a good mechanism to develop programs.
注意^在[]内部时表示取反,在[]外面表示行首。
5 行尾结束:行尾部为小数点 (.) 的那一行:
特别注意到,因为小数点具有其他意义(底下会介绍),所以必须要使用转义字符(\)来加以解除其特殊意义
找出空白行:
yan@ysw:~/桌面$ grep -n '^$' a.txt 6:7:13:21:先介绍一下.和*
.:代表一个任意字节*:代表重复前一个字符,0个或者多个,需要与一个字符组合才有意义。例如要出现2个及以上的o,则ooo*,o*代表出现0个或者多个o6 需要找出 g??d 的字串:
yan@ysw:~/桌面$ grep -n 'g..d' a.txt 1:"Open Source" is a good mechanism to develop programs.9:Oh! The soup taste good.16:The world <Happy> is the same with "glad".列出最少两个o的行:
yan@ysw:~/桌面$ grep -n 'ooo*' a.txt 1:"Open Source" is a good mechanism to develop programs.2:apple is my favorite food.3:Football game is not use feet only.9:Oh! The soup taste good.18:google is the best tools for search keyword.19:goooooogle yes!想要字串开头与结尾都是 g,但是两个 g 之间仅能存在至少一个 o:
yan@ysw:~/桌面$ grep -n 'goo*g' a.txt 18:google is the best tools for search keyword.19:goooooogle yes!想要找出 g 开头与 g 结尾的行,当中的字符可有可无:
可以发现此时相当于返回一个范围的子字符串了。
最后介绍一下限制连续RE字符串的范围方法即{}
我们可以利用 . 与 RE 字符及 * 来配置 0 个到无限多个重复字节, 那如果我想要限制一个范围区间内的重复字节数就需要{},由于{ 与 } 的符号在 shell 是有特殊意义的,因此, 我们必须要使用字符 \ 来让他失去特殊意义才行。:
7 要找到两个 o 的字串:
yan@ysw:~/桌面$ grep -n 'ooo*\{2\}' a.txt 1:"Open Source" is a good mechanism to develop programs.2:apple is my favorite food.3:Football game is not use feet only.9:Oh! The soup taste good.18:google is the best tools for search keyword.19:goooooogle yes!要找出 g 后面接 2 到 5 个 o ,然后再接一个 g 的字串:
yan@ysw:~/桌面$ grep -n 'go*\{2,5\}g' a.txt 18:google is the best tools for search keyword.19:goooooogle yes!
- Linux 三大文本处理命令之一GREP
- Linux 三大文本处理命令之一AWK
- 三大文本处理命令之一SED
- linux文本处理三剑客(一):grep命令详解
- Linux文本处理三剑客之grep命令
- Linux文本处理三剑客(grep)
- Linux文本处理三剑客(grep)
- linux文本处理三剑客之grep
- linux文本处理三剑客之grep
- linux文本处理三剑客之grep
- Linux文本处理工具grep命令详解
- linux系统三大文本处理工具grep、sed及awk的简单介绍
- Linux 基础命令(五)—— 文本处理三剑客之grep
- shell三大文本处理工具grep、sed、awk心得
- Linux文本处理3大利器sed grep awk
- linux下的文本处理命令sed&awk&grep
- linux下的文本处理命令sed&awk&grep
- linux命令系列七之find/grep文本处理
- 从一个文件中读取用户列表,来添加系统用户
- Burp Suite证书导入证书(https抓包)
- 二分查找----递归实现
- 用栈队列的方式模拟计算机读取和结束
- java多线程:14、Exchanger同步辅助类
- Linux 三大文本处理命令之一GREP
- oc——block
- 有重复元素排列问题
- 车间生产管理中生产质检难题如何解决?
- spring mybatis集成报错:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
- public ArrayList(Collection<? extends E> c){}中的 ? 和 E
- PL/SQL Developer连接本地Oracle 11g 64位数据库
- Mac & Linux 生成ssh key
- c++第4次实验报告 项目 1 数组素数排序