首页 > 代码库 > linux学习---正则表达式与grep

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].

 

<未完>