linux下的RE 和GNU grep 解释一下

作者&投稿:宫何 (若有异议请与网页底部的电邮联系)
急:Linux 和 grep命令大全~

Linux系统的学习过程中,会认识很多命令,记住这些命令会对你学习Linux系统,有很好的提高。你可能会看到grep命令,这里将介绍grep命令的知识。1.作用
Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。2.格式
grep [options]3.主要参数
[options]主要参数:
-c:只输出匹配行的计数。
-I:不区分大小写(只适用于单字符)。
-h:查询多文件时不显示文件名。
-l:查询多文件时只输出包含匹配字符的文件名。
-n:显示匹配行及行号。
-s:不显示不存在或无匹配文本的错误信息。
-v:显示不包含匹配文本的所有行。
pattern正则表达式主要参数:
\:忽略正则表达式中特殊字符的原有含义。
^:匹配正则表达式的开始行。
$: 匹配正则表达式的结束行。
\<:从匹配正则表达式的行开始。
\>:到匹配正则表达式的行结束。
[ ]:单个字符,如[A]即A符合要求 。
[ - ]:范围,如[A-Z],即A、B、C一直到Z都符合要求 。
。:所有的单个字符。
* :有字符,长度可以为0。4.grep命令使用简单实例
$ 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′就可以了。5.grep命令使用复杂实例
假设您正在’/usr/src/Linux/Doc’目录下搜索带字符串’magic’的文件:
$ grep magic /usr/src/Linux/Doc/*
sysrq.txt:* How do I enable the magic SysRQ key?
sysrq.txt:* How do I use the magic SysRQ key?
其中文件’sysrp.txt’包含该字符串,讨论的是 SysRQ 的功能。
默认情况下,’grep’只搜索当前目录。如果此目录下有许多子目录,’grep’会以如下形式列出:
grep: sound: Is a directory
这可能会使’grep’的输出难于阅读。这里有两种解决的办法:
明确要求搜索子目录:grep -r
或忽略子目录:grep -d skip
如果有很多输出时,您可以通过管道将其转到’less’上阅读:
$ grep magic /usr/src/Linux/Documentation/* | less
这样,您就可以更方便地阅读。有一点要注意,您必需提供一个文件过滤方式(搜索全部文件的话用 *)。如果您忘了,’grep’会一直等着,直到该程序被中断。如果您遇到了这样的情况,按 ,然后再试。下面还有一些有意思的命令行参数:
grep -i pattern files :不区分大小写地搜索。默认情况区分大小写,
grep -l pattern files :只列出匹配的文件名,
grep -L pattern files :列出不匹配的文件名,
grep -w pattern files :只匹配整个单词,而不是字符串的一部分(如匹配’magic’,而不是’magical’),
grep -C number pattern files :匹配的上下文分别显示[number]行,
grep pattern1 | pattern2 files :显示匹配 pattern1 或 pattern2 的行,
grep pattern1 files | grep pattern2 :显示既匹配 pattern1 又匹配 pattern2 的行。这里还有些用于搜索的特殊符号:
\ 分别标注单词的开始与结尾。
例如:
grep man * 会匹配 ‘Batman’、’manic’、’man’等,
grep ‘\<man’ * 匹配’manic’和’man’,但不是’Batman’,
grep ‘\’ 只匹配’man’,而不是’Batman’或’manic’等其他的字符串。
‘^’:指匹配的字符串在行首,
‘$’:指匹配的字符串在行尾, 1. grep简介grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。Unix的grep家族包括grep、egrep和fgrep。egrep和fgrep的命令只跟grep有很小不同。egrep是grep的扩展,支持更多的re元字符, fgrep就是fixed grep或fast grep,它们把所有的字母都看作单词,也就是说,正则表达式中的元字符表示回其自身的字面意义,不再特殊。Linux使用GNU版本的grep。它功能更强,可以通过-G、-E、-F命令行选项来使用egrep和fgrep的功能。grep的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到屏幕,不影响原文件内容。2. 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)
3.Grep命令选项-?同时显示匹配行上下的?行,如:grep -2 pattern filename同时显示匹配行的上下2行。-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如果被引用,就把表达式做为一个单词搜索。-V,--version显示软件版本信息。4.实例要用好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]' aa显示所有包含每个字符串至少有5个连续小写字符的字符串的行。$ grep 'w(es)t.*' aa如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.*),这些字符后面紧跟着另外一个es(),找到就显示该行。如果用egrep或grep -E,就不用""号进行转义,直接写成'w(es)t.*'就可以了。

grep把模式当做正则表达式看,fgrep把模式当做固定字符串看,所以后者要比前者速度快,当然同时后者的搜索功能要弱于前者。

grep
1.作用
grep命令可以指定文件中搜索特定的内容,并将含有这些内容的行标准输出。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。
2.格式
grep [options]
3.主要参数
[options]主要参数:
-c:只输出匹配行的计数。
-I:不区分大小写(只适用于单字符)。
-h:查询多文件时不显示文件名。
-l:查询多文件时只输出包含匹配字符的文件名。
-n:显示匹配行及行号。
-s:不显示不存在或无匹配文本的错误信息。
-v:显示不包含匹配文本的所有行。
pattern正则表达式主要参数:
\:忽略正则表达式中特殊字符的原有含义。
^:匹配正则表达式的开始行。
$: 匹配正则表达式的结束行。
\:到匹配正则表达式的行结束。
[ ]:单个字符,如[A]即A符合要求 。
[ - ]:范围,如[A-Z],即A、B、C一直到Z都符合要求 。
。:所有的单个字符。
* :有字符,长度可以为0。

则表达式是Linux/Unix系统中非常重要的概念。正则表达式(也称为“regex”或“regexp”)是一个可以描述一类字符串的模式
(Pattern)。如果一个字符串可以用某个正则表达式来描述,我们就说这个字符和该正则表达式匹配(Match)。这和DOS中用户可以使用通配符
“*”代表任意字符类似。在Linux系统上,正则表达式通常被用来查找文本的模式,以及对文本执行“搜索-替换”操作和其它功能。

GNU是Stallman的一个开源计划,因为Unix是一套收费的操作系统。他希望营造一个自由开源的平台,GNU的全称是 "GNU's Not Unix”,有点意思吧GNU成就了Linux,事实上Linux只是个内核,而当时GNU拥有除了内核外所有的软件,他们一结合就可以成为发行版使用了。


南湖区17158177643: linux下的RE 和GNU grep 解释一下
益高托恩: GNU是Stallman的一个开源计划,因为Unix是一套收费的操作系统. 他希望营造一个自由开源的平台,GNU的全称是 "GNU's Not Unix”,有点意思吧 GNU成就了Linux,事实上Linux只是个内核,而当时GNU拥有除了内核外所有的软件,他们一结合就可以成为发行版使用了.

南湖区17158177643: 在LINUX中GNU是什么? -
益高托恩: ........GNU是“GNU's Not Unix”的递归缩写.GNU宗旨是创造一个完全自由的是操作系统.个人建议你去看看GNU宣言

南湖区17158177643: linux系统下常见的文件格式有哪些 -
益高托恩: 在Linux操作系统里有Ext2、Ext3、Linux swap和VFAT四种格式 Ext2:Ext2是GNU/Linux系统中标准的文件系统.这是Linux中使用最多的一种文件系统,它是专门为Linux设计的,拥有极快的速度和极小的CPU占用率.Ext2既可以用于标准的块设...

南湖区17158177643: Linux史话:Linux和GNU有什么关系? -
益高托恩: 首先是GNU计划,由理查德*斯托尔曼发起.GNU组织发布了一系列的GNU工具集.然后到91年的时候,Linus开发了Linux,当时不过是一个内核;由于Linux采用开放源代码,所以自然和GNU的开源精神不谋而合,两者就结合在一起了.其结果就是一个完整的GNU/Linux操作系统出现了.

南湖区17158177643: Linux下gcc编译介绍 -
益高托恩: Linux系统下的Gcc(GNU C Compiler)是GNU推出的功能强大、性能优越的多平台编译器,是GNU的代表作品之一.gcc是可以在多种硬体平台上编译出可执行程序的超级编译器,其执行效率与一般的编译器相比平均效率要高20%~30%. Gcc编...

南湖区17158177643: 如何建立Linux系统下交叉编译环境 -
益高托恩: 最近有很多朋友在探讨关于建立Linux交叉编译环境的问题,下面就一些问题作一个说明,以期抛砖引玉. 基于Linux操作系统的应用开发环境一般是由目标系统硬件(开发板)和宿主PC机所构成.目标硬件开发板用于运行操作系统和系统应用...

南湖区17158177643: 在Linux下如何开发C程序? -
益高托恩: 在Linux开发环境下,GCC是进行C程序开发不可缺少的编译工具.GCC是GNU C Compile的缩写,是GNU/Linux系统下的标准C编译器.虽然GCC没有集成的开发环境,但堪称是目前效率很高的C/C++编译器.《linux就该这么学》非常值得您一...

南湖区17158177643: linux 下的工具链是什么意思? -
益高托恩: GNU Compiler Collection(gcc)GNU libc (glibc)以及用来编译、测试和分析软件的 GNU binutils (binutils).他是自依赖的, 也就是说 他构成了一个编译,测试,安装的完整体,使用这个工具链可以很容易从0开始创建一个GNU/Linux系统

南湖区17158177643: linux下一般用什么编译器编译c工程 -
益高托恩: 首先一定要安装 gcc (或者 cc )编译器.然后在 Linux 系统下,首先使用 vi 全屏幕编辑程序编辑一个后缀名为 .c 的文件,然后使用 gcc 编译器对你的 C 语言源程序进行编译、连接.最后才能够运行生成后的运行文件(如果你的源程序没有任何编译错误的话).当然了,在 gcc 的编译过程中,会有很多选择项.这个就是靠编程经验了.举例如下: gcc test.c -o myrunfile ( -o 选项指定输出的运行文件名为:myrunfile,如果不指定 -o 选项的话,缺省的运行文件名为:a.out)

南湖区17158177643: 如何建立Linux下的ARM交叉编译环境 -
益高托恩: 这个过程如下 1. 下载源文件、补丁和建立编译的目录 2. 建立内核头文件 3. 建立二进制工具(binutils) 4. 建立初始编译器(bootstrap gcc) 5. 建立c库(glibc) 6. 建立全套编译器(full gcc) 下载源文件、补丁和建立编译的目录 1. 选定软件版本...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网