[GPL]GREP - basic - practice -advanced
1. grep简介
grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,
它能使用正则表达式搜索文本,并把匹配的行打印出来。Unix的grep家族包括grep、egrep和fgrep。
Basic
egrep和fgrep的命令只跟grep有很小不同。egrep是grep的扩展,支持更多的re元字符,fgrep就是fixed grep或fast grep,它们把所有的字母都看作单词,也就是说,正则表达式中的元字符表示回其自身的字面意义,不再特殊。
linux使用GNU版本的grep。它功能更强,可以通过-G、-E、-F命令行选项来使用egrep和fgrep的功能。
grep的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到屏幕,不影响原文件内容。
grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。
我们利用这些返回值就可进行一些自动化的文本处理工作。
2. grep正则表达式元字符集(基本集)
^ 锚定行的开始 如:'^grep'匹配所有以grep开头的行。
$ 锚定行的结束 如:'grep$'匹配所有以grep结尾的行。
. 匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p。
* 匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟grep的行。 .*一起用代表任意字符。
[ ] 匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。
[^] 匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-F和H-Z的一个字母开头,紧跟rep的行。
\(..\) 标记匹配字符,如'\(love\)',love被标记为1。
\< 锚定单词的开始,如:'\<grep'匹配包含以grep开头的单词的行。
\> 锚定单词的结束,如'grep\>'匹配包含以grep结尾的单词的行。
x\{m\} 重复字符x,m次,如:'o\{5\}'匹配包含5个o的行。
x\{m,\} 重复字符x,至少m次,如:'o\{5,\}'匹配至少有5个o的行。
x\{m,n\} 重复字符x,至少m次,不多于n次,如:'o\{5,10\}'匹配5--10个o的行。
\w 匹配文字和数字字符,也就是[A-Za-z0-9],如:'G\w*p'匹配以G后跟零个或多个文字或数字字符,然后是p。
\W \w的反置形式,匹配一个或多个非单词字符,如点号句号等。
\b 单词锁定符,如: '\bgrep\b'只匹配grep。
3. 用于egrep和 grep -E的元字符扩展集
+ 匹配一个或多个先前的字符。如:'[a-z]+able',匹配一个或多个小写字母后跟able的串,如loveable,enable,disable等。
? 匹配零个或多个先前的字符。如:'gr?p'匹配gr后跟一个或没有字符,然后是p的行。
a|b|c 匹配a或b或c。如:grep|sed匹配grep或sed
() 分组符号,如:love(able|rs)ov+匹配loveable或lovers,匹配一个或多个ov。
x,x{m,},x{m,n} 作用同x\{m\},x\{m,\},x\{m,n\}
4. POSIX字符类
为了在不同国家的字符编码中保持一至,POSIX(The Portable Operating System Interface)增加了特殊的字符类,如[:alnum:]是A-Za-z0-9的另一个写法。要把它们放到[]号内才能成为正则表达式,如[A- Za-z0-9]或[[:alnum:]]。在linux下的grep除fgrep外,都支持POSIX的字符类。 [:alnum:] 文字数字字符 [:alpha:] 文字字符 [:digit:] 数字字符 [:graph:] 非空字符(非空格、控制字符) [:lower:] 小写字符 [:cntrl:] 控制字符 [:print:] 非空字符(包括空格) [:punct:] 标点符号 [:space:] 所有空白字符(新行,空格,制表符) [:upper:] 大写字符 [:xdigit:] 十六进制数字(0-9,a-f,A-F)
5. Grep命令选项
-? 同时显示匹配行上下的?行,如:grep -2 pattern filename同时显示匹配行的上下2行。 -a, --text 等价于匹配text,用于(Binary file (standard input) matches)报错 -b,--byte-offset 打印匹配行前面打印该行所在的块号码。 -c,--count 只打印匹配的行数,不显示匹配的内容。 -f File,--file=File 从文件中提取模板。空文件中包含0个模板,所以什么都不匹配。 -h,--no-filename 当搜索多个文件时,不显示匹配文件名前缀。 -i,--ignore-case 忽略大小写差别。 -q,--quiet 取消显示,只返回退出状态。0则表示找到了匹配的行。 -l,--files-with-matches 打印匹配模板的文件清单。 -L,--files-without-match 打印不匹配模板的文件清单。 -n,--line-number 在匹配的行前面打印行号。 -s,--silent 不显示关于不存在或者无法读取文件的错误信息。 -v,--revert-match 反检索,只显示不匹配的行。 -w,--word-regexp 如果被\<和\>引用,就把表达式做为一个单词搜索。 -R, -r, --recursive 递归的读取目录下的所有文件,包括子目录。 比如 grep -R 'pattern' test 会在 test 及其子目录下的所有文件中,匹配 pattern。 -V,--version 显示软件版本信息。
6. 实例
要用好grep这个工具,其实就是要写好正则表达式,所以这里不对grep的所有功能进行实例讲解,只列几个例子,讲解一个正则表达式的写法。 $ ls -l | grep '^a' 通过管道过滤ls -l输出的内容,只显示以a开头的行。 $ grep 'test' d* 显示所有以d开头的文件中包含test的行。 $ grep 'test' aa bb cc 显示在aa,bb,cc文件中匹配test的行。 $ grep '[a-z]\{5\}' aa 显示所有包含每个字符串有5个连续小写字符的字符串的行。 $ grep 'w\(es\)t.*\1' aa 如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.*),这些字符后面紧跟着另外一个es(\1),找到就显示该行。如果用egrep或grep -E,就不用"\"号进行转义,直接写成'w(es)t.*\1'就可以了。
7.注意
在某些机器上,要使用-E参数才能够进行逻辑匹配(详见下) grep "a|b" (匹配包含字符样式为"a|b"的行) grep -E "a|b" (匹配包含字符样式为"a"或"b"的行) man grep里面关于-E参数的说明是 -E Treats each pattern specified as an extended regular expression (ERE). A NULL value for the ERE matches every line. Note: The grep command with the -E flag is the same as the egrep command, except that error and usage messages are different and the -s flag functions differently.
8、拓展命令
egrep 命令,搜索文件获得模式。 egrep 命令会在输入文件(缺省值为标准输入)中搜索与用 Pattern 参数指定的模式相匹配的行。这些模式是完整的 正则表达式就像在 ed 命令中的那样(除了 \ (反斜杠)和 \\ (双反斜杠))。下列规则也应用于 egrep 命令: * 一个正则表达式后面带一个 + (加号)会匹配一个或多个的正则表达式。 * 一个正则表达式后面带一个 ? (问号)会匹配零个或一个该正则表达式。 * 由 | (竖线)或者换行符隔开的多个正则表达式会匹配与任何一个正则表达式所匹配的字符串。 * 一个正则表达式可以被包括在“()”(括弧)中进行分组。 换行符将不会被正则表达式匹配。 运算符的优先顺序是 [, ], *, ?, +, 合并, | 和换行符。 注意: egrep 命令与 grep 命令带 -E 标志是一样的,除了错误消息和使用消息不同以及 -s 标志的功能不同之外。 egrep 命令会显示包含该匹配行的文件,如果您指定了多于一个 File 参数的话。对 shell 有特殊含义的字符 ($, *, [, |, ^, (, ), \ ) 出现在 Pattern 参数中时必须带双引号。如果 Pattern 参数不是简单字符串,通常必须用单引号将整个模式括起来。在表达式中比如 [a-z],减号表示通过当前整理序列。整理序列可以定义等价的类以供在字符范围中使用。它使用了快速确定性的算法,有时需要外部空间。 fgrep 命令, 为文件搜索文字字符串。 fgrep 命令搜索 File 参数指定的输入文件(缺省为标准输入)中的匹配模式的行。fgrep 命令特别搜索 Pattern 参数,它们是固定的字符串。如果在 File 参数中指定一个以上的文件 fgrep 命令将显示包含匹配行的文件。 fgrep 命令于 grep 和 egrep 命令不同,因为它搜索字符串而不是搜索匹配表达式的模式。fgrep 命令使用快速的压缩算法。$, *, [, |, (, ) 和 \ 等字符串被 fgrep 命令按字面意思解释。这些字符并不解释为正则表达式,但它们在 grep 和 egrep 命令中解释为正则表达式。因为这些字符对于 shell 有特定的含义,完整的字符串应该加上单引号(‘ ... ’)。. 如果没有指定文件, fgrep 命令假定标准输入。一般,找到的每行都复制到标准输出中去。如果不止一个输入文件,则在找到的每行前打印文件名。
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
[GPL]GREP - basic - practice -advanced相关推荐
- WINCC组态软件Basic/Comfort/Advanced/Professional版本
西门子官方可以订购的软件版本,包括WinCC Basic.WinCC Comfort.WinCC Advanced 和 WinCC Professional.此外还有两个运行系统:WinCC Runt ...
- 浙大oj(Basic Practice)1004
1004 成绩排名 读入 n(>0)名学生的姓名.学号.成绩,分别输出成绩最高和成绩最低学生的姓名和学号. 每个测试输入包含 1 个测试用例,格式为: 第 1 行:正整数 n 第 2 行:第 1 ...
- practice是什么意思_practice是什么意思_practice在线翻译_英语_读音_用法_例句_海词词典...
She is doing her practice at the piano. 她正在练钢琴. Basic practice is useful for learning English. 基础训练对 ...
- Stanford University courses of computer science department(斯坦福计算机系课程设置)
斯坦福学科目前分为7个department:Business, Earth, Education, Engineering, Humanities & Sciences, Law, Medic ...
- 位域外部申明_(外部)域特定语言的完整指南
位域外部申明 本指南将向您显示: 什么 :定义后,我们将研究19个DSL实例 原因 :使用DSL可以带来哪些具体好处? 方法 :我们将讨论构建DSL的不同方法以及成功的因素是什么 之后,您将获得一系列 ...
- (外部)特定领域语言的完整指南
本指南将向您显示: 什么 :定义后,我们将研究19个DSL实例 原因 :使用DSL可以带来哪些具体好处? 如何 :我们将讨论构建DSL的不同方法以及成功的因素是什么 之后,您将获得一系列资源以学习更多 ...
- 斯坦福大学计算机类课程视频
斯坦福大学计算机类课程都是以CS开头编号,可以在网址https://exploredegrees.stanford.edu/coursedescriptions/cs/查询,在网上可以登录查看课程的课 ...
- github上可供新手阅读和玩耍的java项目有哪些??
扫垃圾 ,Java 爱好者, 前沿技术思考者 刘巍然-学酥 等 217 人赞同 一个聊天程序范例: tinystruct2.0/smalltalk.java at master · m0ver/tin ...
- vba数组dim_NDArray — —一个基于Java的N-Dim数组工具包
vba数组dim 介绍 (Introduction) Within many development languages, there is a popular paradigm of using N ...
最新文章
- READING NOTE: R-FCN: Object Detection via Region-based Fully Convolutional Networks
- python中的进程
- VTK:冰激凌用法实战
- 洛谷 P1308/暂无题解
- 复习-网络编程之IP和端口号
- Mr.J-- jQuery学习笔记(二十五)--监听DOM加载
- linux mysql 查询慢_linux – MySQL非常简单的SELECT查询速度极慢
- tomcat并发数设置
- C++编程题-职工有职工号,姓名,年龄.输入n个职工的信息,找出3个年龄最小的职工打印出来
- Linux系统备份与还原
- java实现excel转图片功能
- [ 笔记 ] 计算机网络安全_4_网络扫描和网络监听
- 元数据是什么?举例告诉你什么是元数据
- android 没有menu菜单键,android之onCreateOptionsMenu失效,按菜单键无反应
- P4383 [八省联考2018]林克卡特树lct 树形DP+凸优化/带权二分
- 发射瞬时速度约束下的弹道导弹轨迹仿真算法
- RPC中Stub的理解
- Win7/Win8下双击运行jar程序的方法
- 今日早报 每日精选12条新闻简报 每天一分钟 知晓天下事 8月17日
- 软件工程师也要懂的硬件知识(二极管、三极管、MOS管)
热门文章
- python 学习笔记二 搭建ftp服务器
- C#LeetCode刷题之#532-数组中的K-diff数对(K-diff Pairs in an Array)
- linux中的medium_如何在freeCodeCamp Medium出版物中发布
- hdfs 小文件服务器,服务器远程上传hdfs文件大小
- stm32烧录软件_使用华为LiteOS Studio开发STM32物联网工程1
- Matlab2018a安装成功后,打开出现licensing error:-8523
- MySQL的数据类型和约束
- EXT学习经验分享:深刻理解EXT与服务器端的交互
- C#开源资源大汇总(1)
- 漫步数理统计二十九——函数期望