注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

谷搜互联网应用www.iguso.com

谷搜专注企业邮箱十二年

 
 
 

日志

 
 

基础正规表示法  

2014-06-03 14:30:00|  分类: 技术文章 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

 既然正规表示法是处理字串的一种表示方式,那么对字元排序有影响的语系资料就会对正规表示法的结果有影响! 此外,正规表示法也需要支援工具程式来辅助才行!所以,我们这里就先介绍一个最简单的字串撷取功能的工具程式,那就是 grep 啰! 前一章已经介绍过 grep 的相关选项与参数,本章着重在较进阶的 grep 选项说明啰! 介绍完 grep 的功能之后,就进入正规表示法的特殊字符的处理能力了。

  语系对正规表示法的影响

  为什么语系的资料会影响到正规表示法的输出结果呢?我们在第零章计算机概论的文字编码系统裡面谈到,档案其实记录的仅有 0 与 1,我们看到的字元文字与数字都是透过编码表转换来的。由于不同语系的编码资料并不相同,所以就会造成资料撷取结果的差异了。 举例来说,在英文大小写的编码顺序中,zh_TW.big5 及 C 这两种语系的输出结果分别如下:

  LANG=C 时:0 1 2 3 4 ... A B C D ... Z a b c d ...z

  LANG=zh_TW 时:0 1 2 3 4 ... a A b B c C d D ... z Z

  上面的顺序是编码的顺序,我们可以很清楚的发现这两种语系明显就是不一样!如果你想要撷取大写字元而使用 [A-Z] 时, 会发现 LANG=C 确实可以仅捉到大写字元 (因为是连续的) ,但是如果 LANG=zh_TW.big5 时,就会发现到, 连同小写的 b-z 也会被撷取出来!因为就编码的顺序来看, big5 语系可以撷取到『 A b B c C ... z Z 』这一堆字元哩! 所以,使用正规表示法时,需要特别留意当时环境的语系为何, 否则可能会发现与别人不相同的撷取结果喔!

  由于一般我们在练习正规表示法时,使用的是相容于 POSIX 的标準,因此就使用『 C 』这个语系(註1)! 因此,底下的很多练习都是使用『 LANG=C 』这个语系资料来进行的喔! 另外,为了要避免这样编码所造成的英文与数字的撷取问题,因此有些特殊的符号我们得要瞭解一下的! 这些符号主要有底下这些意义:(註1)

  特殊符号代表意义

  [:alnum:]代表英文大小写字元及数字,亦即 0-9, A-Z, a-z

  [:alpha:]代表任何英文大小写字元,亦即 A-Z, a-z

  [:blank:]代表空白键与 [Tab] 按键两者

  [:cntrl:]代表键盘上面的控制按键,亦即包括 CR, LF, Tab, Del.. 等等

  [:digit:]代表数字而已,亦即 0-9

  [:graph:]除了空白字元 (空白键与 [Tab] 按键) 外的其他所有按键

  [:lower:]代表小写字元,亦即 a-z

  [:print:]代表任何可以被列印出来的字元

  [:punct:]代表标点符号 (punctuation symbol),亦即:" ' ? ! ; : # $...

  [:upper:]代表大写字元,亦即 A-Z

  [:space:]任何会产生空白的字元,包括空白键, [Tab], CR 等等

  [:xdigit:]代表 16 进位的数字类型,因此包括: 0-9, A-F, a-f 的数字与字元

  尤其上表中的[:alnum:], [:alpha:], [:upper:], [:lower:], [:digit:] 这几个一定要知道代表什么意思,因为他要比 a-z 或 A-Z 的用途要确定的很!好了,底下就让我们开始来玩玩进阶版的 grep 吧!

  grep 的一些进阶选项

  我们在第十一章 BASH 裡面的 grep 谈论过一些基础用法, 但其实 grep 还有不少的进阶用法喔!底下我们仅列出较进阶的 grep 选项与参数给大家参考, 基础的 grep 用法请参考前一章的说明啰!企业邮箱

  [root@www ~]# grep [-A] [-B] [--color=auto] '搜寻字串' filename

  选项与参数:

  -A :后面可加数字,为 after 的意思,除了列出该行外,后续的 n 行也列出来;

  -B :后面可加数字,为 befer 的意思,除了列出该行外,前面的 n 行也列出来;

  --color=auto 可将正确的那个撷取资料列出颜色

  範例一:用 dmesg 列出核心讯息,再以 grep 找出内含 eth 那行

  [root@www ~]# dmesg | grep 'eth'

  eth0: RealTek RTL8139 at 0xee846000, 00:90:cc:a6:34:84, IRQ 10

  eth0: Identified 8139 chip type 'RTL-8139C'

  eth0: link up, 100Mbps, full-duplex, lpa 0xC5E1

  eth0: no IPv6 routers present

  # dmesg 可列出核心产生的讯息!透过 grep 来撷取网路卡相关资讯 (eth) ,

  # 就可发现如上资讯。不过没有行号与特殊颜色显示!看看下个範例吧!

  範例二:承上题,要将捉到的关键字显色,且加上行号来表示:

  [root@www ~]# dmesg | grep -n --color=auto 'eth'

  247:eth0: RealTek RTL8139 at 0xee846000, 00:90:cc:a6:34:84, IRQ 10

  248:eth0: Identified 8139 chip type 'RTL-8139C'

  294:eth0: link up, 100Mbps, full-duplex, lpa 0xC5E1

  305:eth0: no IPv6 routers present

  # 你会发现除了 eth 会有特殊颜色来表示之外,最前面还有行号喔!

  範例叁:承上题,在关键字所在行的前两行与后叁行也一起捉出来显示

  [root@www ~]# dmesg | grep -n -A3 -B2 --color=auto 'eth'

  245-PCI: setting IRQ 10 as level-triggered

  246-ACPI: PCI Interrupt 0000:00:0e.0[A] -> Link [LNKB] ...

  247:eth0: RealTek RTL8139 at 0xee846000, 00:90:cc:a6:34:84, IRQ 10

  248:eth0: Identified 8139 chip type 'RTL-8139C'

  249-input: PC Speaker as /class/input/input2

  250-ACPI: PCI Interrupt 0000:00:01.4[B] -> Link [LNKB] ...

  251-hdb: ATAPI 48X DVD-ROM DVD-R-RAM CD-R/RW drive, 2048kB Cache, UDMA(66)

  # 如上所示,你会发现关键字 247 所在的前两行及 248 后叁行也都被显示出来!,2000数据库空间

  # 这样可以让你将关键字前后资料捉出来进行分析啦!

  grep 是一个很常见也很常用的指令,他最重要的功能就是进行字串资料的比对,然后将符合使用者需求的字串列印出来。 需要说明的是『grep 在资料中查寻一个字串时,是以 "整行" 为单位来进行资料的撷取的!』也就是说,假如一个档案内有 10 行,其中有两行具有你所搜寻的字串,则将那两行显示在萤幕上,其他的就丢弃了!

  在关键字的显示方面,grep 可以使用 --color=auto 来将关键字部分使用颜色显示。 这可是个很不错的功能啊!但是如果每次使用 grep 都得要自行加上 --color=auto 又显的很麻烦~ 此时那个好用的 alias 就得来处理一下啦!你可以在 ~/.bashrc 内加上这行:『alias grep='grep --color=auto'』再以『 source ~/.bashrc 』来立即生效即可喔! 这样每次执行 grep 他都会自动帮你加上颜色显示啦!


文章源自谷搜服务商 基础正规表示法
  评论这张
 
阅读(8)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018