linux学习---正则表达式与grep
正则表达式(Regular Expression(RE))
是透过一些特殊字符的排列, 用以"搜寻/取代/删除"一列或多列文字字符串, 简单的说, 正则表达式就是用在字符串的处理上面的一项"表达式". 正则表达式并不是一个工具程序, 而是一个字符串处理的标准依据, 如果想要用用正则表达式处理字符串, 就要使用支持正则表达式的工具程序, 这样的程序有很多, 如vi, awk, grep, sed...
grep
基本规则:
grep [-acinv] [--color=auto] ‘搜寻字符串‘ filename
选项与参数:
-a: 将binary档案以text档案方式搜寻数据
-c: 计算找到‘搜寻字符串‘的次数
-i: 忽略大小写
-n: 输出行号
-v: 反向选择, 即显示没有‘搜寻字符串‘内容的行
示例
1. 将last中, 出现root的那一行取出来
last | grep ‘root‘
2. 与1相反, 只要没有root的行
last | grep -v ‘root‘
3. 取出/etc/man.config内含MANPATH的那几行并显示行号
grep --color=auto ‘MANPATH‘ -n /etc/man.config
加上--color=auto选项, 找到的关键词部分会用特殊颜色显示.
进阶
规则:
grep [-A] [-B] [--color=auto] ‘搜寻字符串‘ filename
选项与参数:
-A: 后面可加数字, 为after的意思, 除了列出该行外, 后续的n行也列出来
-B: 后面可加数字,为befer的意思, 除了列出该行外, 前面的n行也列出来
示例
1.
dmesg | grep -n --color=auto ‘eth‘
dmesg可列出核心产生的讯息, 透过grep取网络卡相关信息(eth).
2. 承上题, 将关键词所在行的前俩行与后三行也一起显示:
dmesg | grep -n -A3 -B2 --color=auto ‘eth‘
3.利用中括号[]搜寻集合字符
如果想要搜寻 test 或 taste 这两个单字时,可以发现,其实它们有共通的 ‘t?st‘ 存在, 这个时候,
我可以这样来搜寻:
grep -n ‘t[ae]st‘ filename
4.我们可以使用,
grep -n ‘oo‘ filename
来搜寻包含‘oo‘的行, 这样可能或搜寻一堆包含单词good, food...的行, 如果我们不想要‘oo‘前面有‘g‘呢? 这时可以用集合字符的反向选择[^]:
grep -n ‘[^g]oo‘ filename
如果不想要‘oo‘有小写字母, 我们可以这样写:
grep -n [^a-z]oo‘ filename
也就是说,对于连续的母或数字,可以这样写[a-z], [A-Z], [0-9].
<未完>