--------------------------------------------------------------------------------
`grep'用于查找模式匹配行。
1 简介
******
`grep'查找输入文件中包含匹配给定模式列表的行。当查到匹配行后,将结果行复制到标准输出(缺省)或生成到其他指定输出。
`grep'期望对文本进行匹配,对输入行长度而非可用内存没有限制,并可在一行内对任意字符进行匹配。若输入文件的最后一个字节不是新行符,`grep'会默认提供一个。除非在模式列表中新行也作为分隔符,否则无法在文本中匹配新行。
2 调用`grep'
************
`grep'命令行的一般说明
grep OPTIONS PATTERN INPUT_FILE_NAMES
可以有0或多个OPTIONS。如果没有在OPTIONS(通过`-e PATTERN'或`-f FILE'选项)中被指定,PATTERN将保持不动。
2.1 命令行选项
==============
`grep'具有丰富的选项集:源自POSIX.2和GNU扩展。长选项名全部为GNU扩展,包括POSIX规范的选项。POSIX规范的选项的短名称明确用于简化POSIX可移植编程。少数选项名是为了与早期或外部实现兼容。
2.1.1 一般程序信息
------------------
`--help'
打印概述命令行选项和bug报告地址的用法信息,然后退出。
`-V'
`--version'
将`grep'的版本号打印到标准输出流。该版本号应当包含在所有bug报告中。
2.1.2 匹配控制
--------------
`-e PATTERN'
`--regexp=PATTERN'
使用PATTERN作为模式;在保护以`-'开始的模式方面有用。
`-f FILE'
`--file=FILE'
从FILE获得模式,每行一个。空文件包含0个模式,因此不会匹配任何内容。
`-i'
`-y'
`--ignore-case'
忽略模式和输入文件的大小写区别,`-y'是为兼容而保留的废弃同义词。
`-v'
`--invert-match'
颠倒匹配意义,选择未匹配行。
`-w'
`--word-regexp'
只选取那些匹配整个单词的行。匹配子串要么在行的开始,要么前面是一个非单词要素字符。同样的,也必须是在行尾或后跟一个非单词要素字符。单词要素字符包括字母、数字和下划线。
`-x'
`--line-regexp'
只选择那些精确匹配一整行的匹配项。
2.1.3 一般输出控制
------------------
`-c'
`--count'
禁止正常输出;对每一输入文件以打印匹配行数代替。与`-v'、`--invert-match'选项一起使用,可计算非匹配行。
`--color[=WHEN]'
`--colour[=WHEN]'
围绕非空匹配字符串、匹配行、内容行、文件名、行号、字节偏移和分隔符(针对内容行的域和组),结合换码顺序以彩色显示在终端。颜色在环境变量GREP_COLORS中定义,其默认值是`ms=01;31:mc=01;31:sl=:cx=:fn=35:ln=32:bn=32:se=36'。WHEN可取`never'、`always'、`auto'。
`-L'
`--files-without-match'
禁止正常输出;当没有匹配输出时以打印每一输入文件名代替。在第一次匹配成功时将停止文件扫描。
`-l'
`--files-with-matches'
禁止正常输出;以打印每一输入文件名代替打印输出。在第一次匹配成功时将停止文件扫描。
`-m NUM'
`--max-count=NUM'
在匹配NUM行后停止读取文件。如果输入是来自正则文件的标准输入,并且NUM匹配行是输出, `grep'确保退出前标准输入位于最后一项匹配行之后。可以用于调用过程恢复搜索。例如,下面的shell脚本:
while grep -m 1 PATTERN
do
echo xxxx
done < FILE
而下面的例子可能无法工作,因为管道不是正则文件:
# This probably will not work.
cat FILE |
while grep -m 1 PATTERN
do
echo xxxx
done
当`grep'在NUM匹配停止后,输出所有内容行。如果内容中不包含匹配行,在匹配另一行后`grep'将会停止。当`-c'或`--count'选项同时使用时,`grep'不会输出超过NUM项。当`-v'或`--invert-match'选项同时使用时,`grep'在输出NUM个非匹配行后停止。
`-o'
`--only-matching'
只打印匹配行中的匹配(非空)部分,每一部分都放在单独一个输出行。
`-q'
`--quiet'
`--silent'
静音;不会向标准输出中写入任何内容。若无匹配或发生错误时立即退出。
5 正则表达式
************
正则表达式是描述一组字符串的模式。正则表达式构成与算术表达式相似,通过使用各种操作符合并更小的表达式。`grep'理解两种不同版本的正则表达式语义:BRE和ERE。对GNU `grep'两种语义并无区别。在其他实现中,BRE差一些。
5.1 基本结构
============
基本构建块是匹配单字符的正则表达式。大多数包含所有字母、数字的字符集都是自匹配的正则表达式。任何含特定含义的元字符都以反斜线\为前缀。
一个正则表达式可以跟以下的循环操作:
`.'
句点`.'用于匹配任意单字符。
`?'
前缀项是可选的,并最多匹配一个字符。
`*'
前缀项用于匹配0或多次。
`+'
前缀项用于匹配1或多次。
`{N}'
前缀项用于匹配N次。
`{N }'
前缀项用于匹配N或多次。
`{,M}'
前缀项用于匹配最多M次。
`{N,M}'
前缀项用于匹配N-M次。
`|'用于连接两个RE。
5.2 字符类和括号表达式
======================
emacs $ACE_ROOT/ace/config.h
#include "ace/config-cygwin32.h"o 在
emacs $ACE_ROOT/include/makeinclude/platform_macros.GNU
-----------读书
想读《UNIX Network Programming》很久了,只是这种愿望一直没有特别强烈。用的笔记本换了之后强迫自己只是装了cygwin,没有安装VS,平时写些代码就只能在cygwin下用gcc了。最近对UNIX环境编程和网络基础比较感兴趣,于是读这本书终于提上了议事日程,可是大多数书店都没有这本书了。
工作之后,对于自己喜欢的书,就很少会去看电子版,觉得还是捧卷在手的感觉舒服一些,想怎么看怎么看,享受拿笔在上面写写画画的感觉。因此对于想读但买不到的书,第一反应是等待。在翻电脑上面一些资料的时候才反应过来我已经很久没有down过电子书了,结果就从网上down了很多想读(豆瓣)的书,forgive me, Richard Stevens and anybody.
---------------动手
之前只是在Windows下用过ACE,因为ACE提供了VS各种版本的解决方案,编译过程比较简单。这次放在cygwin下编译的时候,因为环境变量设置问题,并不是非常顺利,参照了源码目录下的ACE-INSTALL.html的描述才将问题解决。现在将过程给出来,仅供google到这里的同学参考:
友情提示:我目前对于cygwin和UNIX类系统的了解停留在知其然(还是在google之后)的水平。
1. 增加环境变量
o 修改/etc/profile文件读写属性:
$ chmod 777 /etc/profile
cygwin下的环境变量可以在该文件中配置,由于该文件默认具有写保护属性,因此需要修改使之可写,修改完成之后应该记得对其进行写保护:
$ chmod 555 /etc/profile
o 打开profile文件(本人使用emacs进行编辑,读者也可以使用vi、vim等,在此不再赘述):
$ emacs /etc/profile
o 往profile中修改和添加环境变量:
将以下五行添加到文件中,ACE_ROOT为ACE源码目录,本文用到的目录是/usr/share/ace:
ACE_ROOT=/usr/share/ace
export ACE_ROOT
LD_LIBRARY_PATH=$ACE_ROOT/ace:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH
# export PATH=$ACE_ROOT/ace:$PATH
这个操作等同于在VS下修改库文件目录,我是直接修改了PATH变量的:
PATH=/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:$ACE_ROOT/ace:$PATH
o 执行/etc/profile
$ /etc/profile
执行修改后有可能需要重启cygwin,可使用下面的命令查看ACE_ROOT设置是否正确:
$ echo $ACE_ROOT
2. 创建若干文件:
o 在$ACE_ROOT/ace 文件夹中创建名为 config.h 的文件,并加入以下内容后保存关闭:
#include "ace/config-cygwin32.h"
o 在$ACE_ROOT/include/makeinclude 文件夹中创建名为 platform_macros.GNU 的文件,并加入以下内容保存关闭:
include $(ACE_ROOT)/include/makeinclude/platform_cygwin32.GNU
3. 编译ACE:
$ cd $ACE_ROOT/ace
$ make
大概会花掉十几分钟时间吧。
4. 测试ACE:
$ cd $ACE_ROOT/tests
$ make
大概又会花掉十几分钟时间吧。
接下来就可以使用perl脚本完成所有测试,我没有使用过perl,临时安装了一下。
$ perl run_test.pl
这个脚本在我一位同事的机器上跑了很久(十几分钟 or 几十分钟?),不幸的是,Windows竟然抛出了一个内存读写错误,更加不幸的是,我现在没有能力去确定。
其他内容可以参考ACE-INSTALL.html中的论述。
PS: 写过两篇水贴之后,对于debian的使用,大致没有以前那么痛苦了,把vim、g++、gdb的简单使用温习一下,可以开始写写代码了,写的代码多的话,用用make,也差不多了。
1) 如何将Shell输入输出设置为彩色:http://blog.csdn.net/qsd007/archive/2007/04/16/1566660.aspx
2) shell下的编程vim+ctags+taglist (ubuntu):http://linux.chinaitlab.com/SHELL/732841.html
3) vim+ctags+taglist+cscope+cppcomplete+global:http://blog.verycd.com/yoyopub/showentry=22855
4) taglist必须解压到root用户~目录下,否则不能启用。
在安装软件或其它空闲时间,我会查看很多命令的help。
烟酒茶码
mandatory [简明英汉词典]
[5mAndEtEri]
adj.命令的, 强制的, 托管的
implied [简明英汉词典]
[im5plaid]
adj.暗指的, 含蓄的
entry [简明英汉词典]
[5entri]
n.登录, 条目, 进入, 入口, [商]报关手续, [律]对土地的侵占, 对房屋的侵入
permission [简明英汉词典]
[pE(:)5miFEn]
n.许可, 允许
synopsis [简明英汉词典]
[si5nCpsis]
n.大纲
encounter [简明英汉词典]
[in5kauntE]
v.遭遇, 遇到, 相遇
n.遭遇, 遭遇战
recursive [简明英汉词典]
[rI`k\:sIv]
adj.回归的, 递归的
traversal [简明英汉词典]
[trA5vE:sl]
横越, 横断物, (横向)往返移动
supplementary [简明英汉词典]
[7sQpli5mentEri]
n.(supplementaries) 增补者, 增补物
adj.附助的
in contrast [简明英汉词典]
相反, 大不相同
symbolic [简明英汉词典]
[sim5bClik]
adj.象征的, 符号的
representation [简明英汉词典]
[7reprizen5teiFEn]
n.表示法, 表现, 陈述, 请求, 扮演, 画像, 继承, 代表
comma [简明英汉词典]
[5kCmE]
n.逗点, 逗号
combination [简明英汉词典]
[7kCmbi5neiFEn]
n.结合, 联合, 合并, 化合, 化合物
affected [简明英汉词典]
[E5fektid]
adj.受到影响的, 受(疾病)侵袭的, 假装的, 做作的
restricted [简明英汉词典]
[ris5triktid]
adj.受限制的, 有限的
facility [简明英汉词典]
[fE5siliti]
n.容易, 简易, 灵巧, 熟练, 便利, 敏捷, 设备, 工具
manipulate [简明英汉词典]
[mE5nipjuleit]
vt.(熟练地)操作, 使用(机器等), 操纵(人或市价、市场), 利用, 应付, 假造
vt.(熟练地)操作,巧妙地处理
general concept [简明英汉词典]
一般概念
vertically [简明英汉词典]
adv.垂直地
semipermanent [简明英汉词典]
[9semI`p\:mEnEnt,9semaI-]
adj.非永久(性)的,暂时的
henceforth [简明英汉词典]
[hens5fC:W]
adv.自此以后, 今后
consecutive [简明英汉词典]
[kEn5sekjutiv]
adj.连续的, 联贯的
repetition [简明英汉词典]
[7repi5tiFEn]
n.重复, 循环, 复制品, 副本
harmlessly [简明英汉词典]
adv.无害地, 无恶意地
intentional [简明英汉词典]
[in5tenFEnEl]
adj.有意图的, 故意的
deliberate [简明英汉词典]
[di5libEreit]
adj.深思熟虑的, 故意的, 预有准备的
v.商讨
obvious [简明英汉词典]
[5CbviEs, -vjEs]
adj.明显的, 显而易见的
straightforwardly [简明英汉词典]
adv.正直地
be sufficient for [简明英汉词典]
足够
sufficient [简明英汉词典]
[sE5fiFEnt]
adj.充分的, 足够的
consecutive [简明英汉词典]
[kEn5sekjutiv]
adj.连续的, 联贯的
prefix [简明英汉词典]
[5pri:fiks]
n.[语]前缀, (人名前的)称谓(如Mr. Dr. Sir等)
interpret [简明英汉词典]
[in5tE:prit]
v.解释, 说明, 口译, 通译, 认为是...的意思
repetition [简明英汉词典]
[7repi5tiFEn]
n.重复, 循环, 复制品, 副本
operate on [简明英汉词典]
v.对...施手术
arbitrary [简明英汉词典]
[5B:bitrEri]
adj.任意的, 武断的, 独裁的, 专断的
arbitrary [简明英汉词典]
[5B:bitrEri]
adj.任意的, 武断的, 独裁的, 专断的
contiguous [简明英汉词典]
[kEn5ti^juEs]
adj.邻近的, 接近的, 毗边的
transient [简明英汉词典]
[5trAnziEnt]
adj.短暂的, 瞬时的
n.瞬时现象
delimit [简明英汉词典]
[di:5limit]
vt.定界限, 划界
spot [简明英汉词典]
[spCt]
n.班点, 污点, 地点, 场所, 现场
v.沾污, 弄脏, 侦察
vt.认出, 发现
SPOT [简明英汉词典]
=Satellite Positioning and Tracking 人造卫星定位及跟踪
toggle [简明英汉词典]
[5tC^l]
n.[海]绳针, 套索钉
vt.拴牢
annoying [简明英汉词典]
[E5nCiiN]
adj.恼人的, 讨厌的
nuisance [简明英汉词典]
[5nju:sns]
n.讨厌的人或东西, 麻烦事, 损害
transient [简明英汉词典]
[5trAnziEnt]
adj.短暂的, 瞬时的
n.瞬时现象
rigid [简明英汉词典]
[5ridVid]
adj.刚硬的, 刚性的, 严格的
temporarily [简明英汉词典]
adv.临时