Linux命令详解 - grep
按照我们以前学习Linux命令的套路,我们习惯于先man一下,看下系统怎么解释这个命令。详细的文档参考这里:http://www.gnu.org/software/grep/manual/grep.html
系统的解释:
grep, egrep, fgrep - print lines matching a pattern
这个解释还是比较明晰的,打印匹配给定模式的行数
这里先提一下,上面提到了egrep、fgrep,这两个grep命令是由于历史的原因还依然存在,egrep=grep -E,fgrep=grep -F实际上是已经废弃了的命令,不再推荐使用
Matcher Selection:匹配模式选择 Matching Control:匹配控制 General Output Control:通用输出控制 Output Line Prefix Control:输出内容控制 Context Line Control:内容输出行控制 File and Directory Selection:文件、目录选择 Other Options:其它选项
我们按照grep的各个方面来学习一下grep命令。
先看下Matcher Selection,选择合适的匹配器,grep支持四种匹配匹配选择:
-E:Extended Regular Expression,扩展正则 -F:Fixed String:固定的String模式 -G:Basic Regular Pattern:基本模式,默认 -P:Perl regular expression:支持Perl匹配
选择合适的匹配模式,就可以按照选择方式进行匹配了。
关于Matching Control,grep支持下面几个参数控制:
-e:PATTERN,支持使用-e参数,将PATTERN作为匹配的内容,PATTERN支持多个匹配内容 -f:FILE,匹配模式从内容读取,每行一个匹配模式,如果文件为空的话,会匹配不出结果 -i:这个最常见,表示匹配时不区分大小写 -w:表示单词匹配,必须是单个词匹配上才算 -x:这个表示是行匹配,必须是正行匹配上PATTERN才算 -y:意义和-i一致,不过已经废弃了。
下面看下General Output Control,这个是控制输出的结果,实际上就是控制输出的一些内容:
-c:这个参数会把其它的输出给去除,只剩下匹配的行数,如果添加-v参数,会输出没有匹配的行数 -L:这个参数比较拗口,是输出没有匹配出内容的文件,换句话说,如果文件中有PATTERN符合要求,就不会输出文件名;另外值得一提的是,这个匹配只要匹配到首个符合PATTERN的内容就结束,不会继续进行。 -l:和-L相反 -m:NUM,控制最大匹配的行数NUM,grep能够控制最大输出不超过NUM行,加上-v参数的话,会输出最大NUM的非匹配行,如果是-c参数呢?读者可以自行学习下。 -o:打印非空匹配部分,注意是只打印匹配的内容,不会打印整行内容 -q:quiet,不打印任何内容,如果匹配找到立即返回0,即使有错误的话,也会立即返回 -s:对于nonexistent和unreadable错误不会打印错误信息;注意该参数是在grep版本表现不一样,尤其要区别GNU版本和Unix版本的区别
上面的General Output Control是控制通用的输出,其实就是一些比较常见的输出控制,下面这个Output Line Prefix Control控制更为详细的信息,算是比较高级的内容。
-b:打印byte偏移量输出,匹配的没个结果相对于文件开头的byte偏移。 -H:打印匹配的每行的文件名,当有多个文件查找时这个是默认配置。 -h:不会打印匹配的所在文件名,这个在单个文件查找时是默认配置 -n:打印行数 -T: -u:Unix-Style byte偏移量,将查找作为Unix style grep,最简单的例子就是CRLF等字符;如果有-b参数的话,-u参数不管用,另外-u参数只在windows情况下有效。 -Z:会在输出的文件名之后输出一个Zero byte,而不是默认的:,这个参数比较让人困惑,不用也罢。
上面的Output Line Prefix Control控制信息也比较易于理解, 就是控制的一些输出控制;如果想对匹配的PATTERN信息控制,看下Context Line Control,这个控制信息是控制匹配行之后的输出信息
-A:NUM,打印匹配行之后的NUM行信息; -B:NUM,打印匹配行之前的NUM行信息; -C:NUM,打印出包括匹配航在内的NUM行输出,--分割匹配一组匹配结果
这组Output Line Prefix Control参数还是比较好用的。
File and Directory Selection这组参数是控制文件选择的,直接看下面的参数吧.
-a:将二进制文件看做是text文件,相当于--binary-files=text的情况 binary-files=TYPE:TYPE的值可以为binary、without-match、text,默认是binary;如果使用text的话,可能会有乱码输出 -D:ACTION,输入可以为Device、FIFO、Socket等,使用该参数去处理这些输入;如果ACTION=read,这些输入源就好像和普通文件一样,如果ACTION=skip,不处理这些输入源。 --exclude=glob:跳过符合glob匹配的文件,其中glob可以使用匹配符 --exclude-from=file:这个是讲glob的内容放在file中,跳过符合这些匹配符匹配的文件。 --exclude-dir=dir:跳过dir目录内容匹配。 -I:相当于--binary-files=without-match --include=glob:指搜索符合glob匹配的文件,当然glob也可以使用匹配符 -r:迭代处理目录下的文件,软连接会被跳过 -R:跟-r参数一致,不过会处理软连接下的内容
除去上面的这些内容,还有一些Other Options可供选择
--line-buffered:匹配输出buffered,有可能会引起性能问题 --mmap:强制系统使用mmap读取文件,替代系统命令read读取,不过在现在系统下,mmap能够获得的性能提升有限,还有可能会引起潜在的问题:如IO Error、读取时文件内容变化等
提到grep的另外一个强大之处就是对于正则的支持,归于正则表达式大家想必都不陌生,这里只是简单提一下,仅供以后参考:
下面这些正则内容,grep都支持:
* The preceding item will be matched zero or more times. + The preceding item will be matched one or more times. {n} The preceding item is matched exactly n times. {n,} The preceding item is matched n or more times. {,m} The preceding item is matched at most m times. {n,m} The preceding item is matched at least n times, but not more than m times.
如果想匹配?*.+{}[]()这些字符,请用反斜杠转义。
说到了反斜杠,还要提一下正则表达式中的Backslash Expression,这个是我们在写正则时最常用的表达式:
\b:字符边界表示,这个表达式会将匹配的结果看做一个单词,而不会在单词中匹配结果 \B:字符非边界表示,匹配必须出现在单词中 \w:匹配所有的[a-zA-Z_0-9] \W:非\w \s:匹配空白字符 \S:非\s
注意,grep还支持这两个匹配字符\<和\> 转义,这两个也是匹配字符边界的,我看官方文档和\b没有区别,只是\b单个就能表达前后边界,而\<表示字符前面的边界,\>表示字符后面的边界。
另外grep还预定义了一些括号表达式,这些 grep预定义的表达式和常规的正则表达式意义一样,只是内容更丰富、控制更加细致;常用的又这些:
[:alnum:]:[:alpha:]和[:digit:]的字符集合 [:alpha:]:[:lower:]和[:upper:]的字符集合,[a-zA-Z] [:blank:]:Space和Tab键 [:cntrl:]:ASCII表中从000到037的字符,再加上177(DEL),注意是八进制 [:digit:]:数字,[0-9] [:graph:]:[:alnum:]和[:punct:]的字符集合 [:lower:]:[a-z],小写字母 [:print:]:可打印字符,[:alnum:]和[:punct:]的字符集合 [:punct:]:符号字符,都有!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ [:space:]:CRLF、Tab等不可见字符 [:upper:]:[A-Z],大写字母 [:xdigit:]:Hexadecimal digit,[0-9a-fA-F],十六进制数
大家对比下上面两个内容,看看正则表达式的BackSlash Expression和grep的预定义表达式的区别。
grep命令非常的强大,能帮助我们做很多事;尤其在处理日志、查询内容,完成正常工作内容时。所以努力学习grep,加上以前的sort、uniq,处理日志就是一把瑞士军刀,无往不胜。
哈哈,瑞士军刀有点过了,不过处理日常工作绰绰有余;grep命令参数太多,我也是查的次数太频繁,某些高级参数用到时经常有点模糊才总结了这篇文章。
相关推荐
这份"linux命令详解---超值哟"的PDF文档无疑是一份非常实用的学习资料,它深入浅出地介绍了Linux命令及其参数的用法。 Linux命令大致分为文件和目录管理、文本处理、系统管理、网络通信以及程序控制等几大类。下面...
这个压缩包“linux-grep-命令-详解.zip”包含了一份详细文档“linux-grep-基本用法及高级技巧.doc”,将深入解析grep命令的各个方面。下面,我们将根据文档内容,对grep命令进行详细介绍。 grep,顾名思义,“g/re/...
### Linux 下 `grep` 命令详解 `grep` 是 Linux 下一款强大的文本搜索工具,可以在文件中搜索固定字符串或者使用正则表达式搜索,是日常开发、运维工作中非常实用的一个命令。本文将详细介绍 `grep` 的常用选项及其...
**Linux `ps` 命令详解** 在Linux操作系统中,`ps`(Process Status)命令是用于查看系统当前进程状态的工具。它能够显示进程的实时信息,帮助用户了解系统的运行情况,进行进程管理。`ps`命令历史悠久,功能强大,...
Linux Find命令是Linux系统中一个极其重要的工具,它允许用户在文件系统...在实际工作中,可以结合其他命令如`grep`、`awk`等,构建更复杂的文件查找和处理流程。希望这个指南能帮助你更好地理解和运用Linux Find命令。
### Linux中的`grep`命令参数及用法详解 `grep`是Linux系统中非常重要的文本搜索工具之一,它能够帮助用户高效地查找文件中的特定模式或字符串。`grep`不仅适用于简单的文本匹配,还能处理复杂的正则表达式,是进行...
`grep`命令用于在文件中查找匹配特定模式的行。基本语法为`grep [-选项] '搜索内容串' 文件名`。以下是一些常用选项: - `-a`:将二进制文件当作文本处理。 - `-c`:计算匹配行的数量。 - `-i`:忽略大小写。 -...
这份名为“Linux常用命令详解-不带书签高清版本”的文档,很显然是为了帮助用户深入理解和掌握这些命令而编写的。它提供了高清的阅读体验,使得文字可以被轻松复制,这对于学习和查找特定命令的用法非常方便。 ...
《Linux命令详解手册》是一份全面的Linux命令参考资料,它详细介绍了Linux系统中广泛使用的一系列命令,覆盖了系统管理、系统设置、文档编辑以及压缩备份等多个方面。为了方便用户查阅,该手册按照命令的功能进行了...
Linux中的`grep`命令是文本处理工具中的重要一员,它在系统管理和日常工作中发挥着巨大的作用。`grep`源自于“global regular ...希望这份`grep`命令详解能帮助初学者快速入门,并逐渐精通Linux文本处理技巧。
Linux grep 命令详解 Linux 中的 grep 命令是一种功能强大的文本搜索工具,通过模式匹配来查找文件中的内容。grep 命令可以根据用户的需求来查找特定的字符串、数字或正则表达式。 grep 命令的基本格式 grep ...
Linux命令详解手册是一本适合Linux新手和有一定基础的用户深入学习Linux命令的指南。它详细介绍了大量的Linux命令,涵盖了系统管理、系统设置、文档编辑以及压缩备份等多个方面的操作。掌握这些命令对于理解和使用...
Linux ps 命令详解 Linux ps 命令是一种强大的进程查看命令,可以确定有哪些进程正在运行、进程是否结束、进程是否僵死、哪些进程占用了过多的资源等等。ps 命令最经常使用的是用于监控后台进程的工作情况,因为...
大数据基础-Linux基础详解课程
`ps aux`是Linux系统中一个非常常用的命令,用于查看系统中当前运行的进程状态。这个命令可以帮助系统管理员和开发者了解系统的运行情况,监控资源使用,查找问题,以及调试程序。下面将详细介绍`ps aux`命令及其...
《Linux命令详解词典》是由施威铭研究室编著的一本详尽解析Linux命令的参考书籍,旨在帮助用户深入理解和掌握Linux操作系统中的各种命令。这本书以扫描版的形式提供,包含PDF格式,方便读者在线阅读或下载。标签...
《Linux命令详解词典(绝版)》作为施威铭研究室所著的一本经典Linux工具书,主要针对Linux操作系统中的各种命令进行了深入的解释和阐述。Linux作为一种自由和开放源代码的类Unix操作系统,广泛应用于服务器、桌面、...
这份“Linux命令详解词典”由施威铭研究室提供,涵盖了Linux系统下的所有基本及高级操作命令,对于学习和理解Linux系统的管理至关重要。下面将详细阐述一些关键的Linux命令。 1. **ls**:列出目录内容。`ls`命令...
《Linux命令详解词典》是一本详尽解析Linux操作系统中常用命令的参考书籍。Linux作为开源、免费的操作系统,其强大的命令行工具是其高效工作的重要组成部分。这本书旨在帮助用户理解和掌握这些命令,从而更好地在...