2024年最全Linux中grep详解,2024年最新高级面试题+解析

最全的Linux教程,Linux从入门到精通

======================

  1. linux从入门到精通(第2版)

  2. Linux系统移植

  3. Linux驱动开发入门与实战

  4. LINUX 系统移植 第2版

  5. Linux开源网络全栈详解 从DPDK到OpenFlow

华为18级工程师呕心沥血撰写3000页Linux学习笔记教程

第一份《Linux从入门到精通》466页

====================

内容简介

====

本书是获得了很多读者好评的Linux经典畅销书**《Linux从入门到精通》的第2版**。本书第1版出版后曾经多次印刷,并被51CTO读书频道评为“最受读者喜爱的原创IT技术图书奖”。本书第﹖版以最新的Ubuntu 12.04为版本,循序渐进地向读者介绍了Linux 的基础应用、系统管理、网络应用、娱乐和办公、程序开发、服务器配置、系统安全等。本书附带1张光盘,内容为本书配套多媒体教学视频。另外,本书还为读者提供了大量的Linux学习资料和Ubuntu安装镜像文件,供读者免费下载。

华为18级工程师呕心沥血撰写3000页Linux学习笔记教程

本书适合广大Linux初中级用户、开源软件爱好者和大专院校的学生阅读,同时也非常适合准备从事Linux平台开发的各类人员。

需要《Linux入门到精通》、《linux系统移植》、《Linux驱动开发入门实战》、《Linux开源网络全栈》电子书籍及教程的工程师朋友们劳烦您转发+评论

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

fdjsoifjidosa
joijofids.
joijiodsf.

#jidfjisoaf
#fjidsfoijsdaifo



* **注意在Linux平台下, 所有文件的结尾都有一个$符**
* **可以利用cat -A 查看文件**



cat -A test.txt


![](https://img-blog.csdnimg.cn/0bb5b0befb3c4c1b9965a131fe0c5e09.png)



注意:如果要在windows下验证本文内容,需要做下述两个准备


1.Windows 系统下使用grep 命令:  [Windows 系统下使用grep 命令\_西晋的no1的博客-CSDN博客]( )


2.测试文件参考链接中转换方式1进行处理: 


[shell脚本报错:“syntax error: unexpected end of file“ 原因和解决\_西晋的no1的博客-CSDN博客]( )


### 2.1、从test.txt文本文件中搜索包含”L”字符的行,则可以使用如下命令



grep “L” test.txt


![](https://img-blog.csdnimg.cn/abaa148d511f44aa8ebc9007209478eb.png)


上图中的命令表示使用grep命令,在test.txt文件中搜索包含”L”字符的行,并将包含L字符的行打印出来。


默认情况下,grep是区分大小写的,所以,文件中包含小写”l”的行没有被打印出来。



### 2.2、输出以 I 开头的行(不区分大小写)



grep “^i” test.txt -i -n -o


![](https://img-blog.csdnimg.cn/c84f8921169347a5b0e1374c72e675cc.png)


注: -i代表不区分大小写, -n代表显示匹配行和行号,-o可以只显示被匹配到的关键字, 而不是将整行的内容都输出,注意,”-o”选项会把每个匹配到的关键字都单独显示在一行中进行输出,什么意思呢?看如下示例即可明白



grep “L” test.txt -i -n -o
grep “L” test.txt -i -n --color


![](https://img-blog.csdnimg.cn/24ea85544a0042f0804c01788c5411ba.png)


如上图所示,当没有使用”-o”选项时,包含"L"字符的行都会被打印出来,当同一行中包含多个"L"时,所在行会被打印出来,对应的关键字也会高亮显示,当使用了”-o”选项时,每个被匹配到的关键字都会被单独打印在一行中,如上图所示,第1个"L"与第2个"L"都属于第3行的文本,但是它们仍然各自独占一行的输出了。



### 2.3、grep的参数--color


使用grep在文本中搜索出的行虽然会被打印了出来,但是在打印这些行时,被匹配到的关键字没有高亮显示,如果我们想要高亮显示行中的关键字,该怎么办呢?我们可以使用”--color”选项,高亮显示行中的关键字,示例如下



grep “L” test.txt -i -n --color


![](https://img-blog.csdnimg.cn/f440b34eeb064e068f456908e57fedff.png)


注:”--color选项”是长选项,使用”--color”与使用”--color=auto”的效果相同,都表示高亮显示关键字。



### 2.4、grep的参数-Bn


"-B”选项,显示符合条件的行之前的行,"B"有before之意,示例如下



grep “L” test.txt -i -n --color -B2


![](https://img-blog.csdnimg.cn/2794604611224784a3c5edec2404b395.png)


如上图所示,包含字符”L″的行被高亮输出了,同时,符合条件的行”之前的2行”也被打印了出来。


没错,上例中的”-B2″选项表示显示符合条件的行的同时还显示之前的2行,举一反三,"B5"代表同时显示之前的5行,"-B3"代表同时显示之前的3行,”-B”选项的后面必须有数字,否则会报错。



### 2.5、grep的参数-An


与"-B"选项对应的选项是"-A"选项,"-B"有Before之意,"-A"有After之意,"-A"代表显示符合条件的行的同时,还要显示之后的行,"-A3"表示同时显示符合条件的行之后的3行。



grep “L” test.txt -i -n --color -A2


![](https://img-blog.csdnimg.cn/a64a06b210b84b738504d092863b486c.png)



### 2.6、grep的参数-Cn


说了"-A",说了"-B",现在说说"-C","-C"选项可以理解为"-A"与"-B"的结合,"-C"选项表示在显示符合条件的行的同时,也会显示其前后的行,如"-C1","-C1"表示打印符合条件的行的同时,也打印出之前的一行与之后的一行,"-C"有Context之意(上下文之意),示例如下。



grep “L” test.txt -i -n --color -C2


![](https://img-blog.csdnimg.cn/969f8590986048e8bc7387f881f5fc84.png)



### 2.7、grep的参数-q


在写脚本时,你可能只是想要利用grep判断文本中是否存在某个字符串,你只关心有没有匹配到,而不关心匹配到的内容,你只关心有,或者没有,这时,我们可以使用grep的静默模式,示例如下



grep “L” test.txt -i -n --color -C2
grep “L” test.txt -i -n --color -C2 -q
echo $?


![](https://img-blog.csdnimg.cn/647be54f6639406f9f38d0705cf78f49.png)




grep “LLL” test.txt -i -n --color -C2
grep “LLL” test.txt -i -n --color -C2 -q
echo $?


![](https://img-blog.csdnimg.cn/604661a561c84899aef7257a02ee0633.png)


当使用"-q"选项时,表示grep使用静默模式,静默模式下grep不会输入任何信息,无论是否匹配到指定的字符串,都不会输出任何信息,所以,我们需要配合"echo $?"命令,查看命令的执行状态,如果返回值为0,证明上一条grep命令匹配到了指定的字符串,如果返回值为1,则证明上一条grep命令没有匹配到指定的字符串,就像上图示例中显示的那样,静默模式下,grep没有输出任何信息,当我们在test.txt文本中查找"L"字符串时,可以匹配到结果,当在文本中查找"LLL"字符串的时候,没有匹配到结果,所以,我们只关心有没有匹配到指定字符时,可以使用"-q"选项,但是需要配合"echo $?"命令查看执行状态。



### 2.8、grep的参数-c



使用”-c”选项即可只统计符合条件的总行数,而不会打印出行。


显示出文章中有多少行有a或b或c



grep “^i” test.txt -i -n -o -c


![](https://img-blog.csdnimg.cn/9f984b290b574bbfb6e1fdaf9110419d.png)



### 2.9、输出以.结尾的行



grep “.$” test.txt -n -o


![](https://img-blog.csdnimg.cn/e844915f39b84cd38b2b0c5fc20878ca.png)


注: 因为.在这里有着特殊含义, 所以要用\转义一下, 如果不加转义字符的话, grep就会把它当做正则表达式来处理(.代表的含义是匹配任意一个字符)



### 2.10、grep的参数-c


不打印以.结尾的行



grep “.$” test.txt -n -v


![](https://img-blog.csdnimg.cn/d8e1bc4e12514fcf8019d1b5a59c745e.png)



### 2.11、^$(代表空行的意思)组合符


找出文件的空行, 以及行号



grep “^$” test.txt -n


![](https://img-blog.csdnimg.cn/c60cae71897d4246bf132acdbd310939.png)



### 2.12、.点符号


**"."点表示任意一个字符, 有且只有一个, 不包含空行**



grep “.” test.txt -n


![](https://img-blog.csdnimg.cn/28bc6946a65a459da7bd368f61128f50.png)



### 2.13、\*符号


**"\*"表示找出前一个字符0次或一次以上**


找出文件中i出现0次或多次的行和行号



grep “i*” test.txt -n


![](https://img-blog.csdnimg.cn/7684dfa9154040aabeca53f8ee377933.png)



### 2.14、.\*组合符


**".\*"表示所有内容, 包括空行**



grep “.*” test.txt -n -o


![](https://img-blog.csdnimg.cn/dace64c0b18645fb9212ea067ca50ab3.png)



### 2.15、^.\*t符 (含义: 以任意内容开头, 直到t结束)



grep “^.*t” test.txt -n -o


![](https://img-blog.csdnimg.cn/8489e033e26a4e8596f50e5645d543e3.png)



### 2.16、[abc]中括号


中括号表达式,[abc]表示匹配中括号中任意一个字符, a或b或c,常见的形式如下;


* [a-z]匹配所有小写单个字母[A-Z]匹配所有单个大写字母
* [a-zA-Z]匹配所有的单个大小写字母
* [0-9]匹配所有单个数字
* [a-zA-ZO-9]匹配所有数字和字母


匹配abc字符中的任意一个,得到它的行数和行号



grep “[abc]” test.txt -n -o


![](https://img-blog.csdnimg.cn/03ed93aef7e14f7b8c925186105fa5e5.png)



### 2.17、[^abc]中括号中去反



[^abc]或[^a-c]这样的命令, "^"符号在中括号中第一位表示排除, 就是排除字符a,b,c


注: **出现再中括号里的尖角号表示取反**



grep “[^abc]” test.txt -n


![](https://img-blog.csdnimg.cn/7ac9d4fdd4244f0cb7d42d795517e3f2.png)



## 三、扩展正则表达式grep实践


在使用”-E”选项时,grep才支持”扩展正则表达式”,不使用”-E”选项时,grep默认只支持”基本正则表达式”。


**此处使用grep -E进行实践扩展正则, egrep官网已经弃用了**


不同的开发语言中,正则表达式的规则可能略有不同,我们在使用grep时,可以使用”-P”选项,指明使用perl兼容的正则表达式。


### 3.1、+号


**+号表示匹配前一个字符1一次或多次,必须使用grep** **-E扩展正则**



grep -E “a+” test.txt -n -o


![](https://img-blog.csdnimg.cn/3f28ca9459b348b197bfca48be81bddb.png)



### 3.2、?符


**匹配前一个字符0次或1次**


找出文件中包含ji或者joi的行




![](https://img-blog.csdnimg.cn/img_convert/9a8cb5f8c0ec69e6499adead0da6e95b.png)


最全的Linux教程,Linux从入门到精通

======================

1.  **linux从入门到精通(第2版)**

2.  **Linux系统移植**

3.  **Linux驱动开发入门与实战**

4.  **LINUX 系统移植 第2版**

5.  **Linux开源网络全栈详解 从DPDK到OpenFlow**



![华为18级工程师呕心沥血撰写3000页Linux学习笔记教程](https://img-blog.csdnimg.cn/img_convert/59742364bb1338737fe2d315a9e2ec54.png)



第一份《Linux从入门到精通》466页

====================

内容简介

====

本书是获得了很多读者好评的Linux经典畅销书**《Linux从入门到精通》的第2版**。本书第1版出版后曾经多次印刷,并被51CTO读书频道评为“最受读者喜爱的原创IT技术图书奖”。本书第﹖版以最新的Ubuntu 12.04为版本,循序渐进地向读者介绍了Linux 的基础应用、系统管理、网络应用、娱乐和办公、程序开发、服务器配置、系统安全等。本书附带1张光盘,内容为本书配套多媒体教学视频。另外,本书还为读者提供了大量的Linux学习资料和Ubuntu安装镜像文件,供读者免费下载。



![华为18级工程师呕心沥血撰写3000页Linux学习笔记教程](https://img-blog.csdnimg.cn/img_convert/9d4aefb6a92edea27b825e59aa1f2c54.png)



**本书适合广大Linux初中级用户、开源软件爱好者和大专院校的学生阅读,同时也非常适合准备从事Linux平台开发的各类人员。**

> 需要《Linux入门到精通》、《linux系统移植》、《Linux驱动开发入门实战》、《Linux开源网络全栈》电子书籍及教程的工程师朋友们劳烦您转发+评论




**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以点击这里获取!](https://bbs.csdn.net/topics/618542503)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 8
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: grep命令是Linux系统常用的文本搜索工具,它可以在文件查找指定的字符串,并将包含该字符串的行输出到屏幕上。grep命令的使用非常灵活,可以通过各种选项和正则表达式来实现不同的搜索需求。 grep命令的基本语法为: grep [选项] 字符串 文件名 其,选项可以是: -c:只输出匹配行的数量,不输出匹配的内容。 -i:忽略大小写。 -n:输出匹配行的行号。 -v:反向匹配,输出不包含指定字符串的行。 -r:递归搜索指定目录下的所有文件。 常用的正则表达式符号包括: ^:匹配行首。 $:匹配行尾。 .:匹配任意一个字符。 *:匹配前面的字符出现次或多次。 +:匹配前面的字符出现1次或多次。 []:匹配方括号的任意一个字符。 {}:匹配花括号指定的次数。 ():将括号的表达式作为一个整体。 使用grep命令可以方便地查找文件的内容,是Linux系统必备的工具之一。 ### 回答2: grep命令是Linux常用的一种文本搜索工具,它可以在文本文件匹配指定的字符串,并将匹配成功的行输出到终端上。grep命令参数非常多,理解它的使用方法可以提高我们在文本操作的效率。下面详细介绍grep命令的使用。 1. grep基本语法 grep命令的基本语法为: grep [option] pattern [file...] 其,[]表示可选参数,pattern表示匹配的字符串,file表示要搜索的文件名。 2. grep的常用选项 其grep的常用选项有以下几种: -i:匹配字符时忽略大小写 -v:显示不匹配的行 -n:显示匹配的行号 -r:递归搜索子目录下文件 3. grep的使用示例 假设当前目录下有一个文件test.txt,内容为: hello world grep command 下面我们将通过例子来学习grep的使用。 3.1 grep命令的基本使用 用法:grep [string] [file] 例如:grep hello test.txt 该命令会在文件test.txt搜索“hello”字符串,并将匹配到的行输出到终端上。 3.2 grep命令不区分大小写 用法:grep -i [string] [file] 例如:grep -i HELLO test.txt 该命令会在文件test.txt搜索“hello”字符串,并将匹配到的行输出到终端上,由于-i选项的存在,该命令不区分大小写。 3.3 grep命令显示行号 用法:grep -n [string] [file] 例如:grep -n hello test.txt 该命令会在文件test.txt搜索“hello”字符串,并将匹配到的行及其行号输出到终端上。 3.4 grep命令显示不匹配的行 用法:grep -v [string] [file] 例如:grep -v hello test.txt 该命令会在文件test.txt搜索不包含“hello”字符串的行,并将匹配到的行输出到终端上。 3.5 grep命令递归搜索子目录下文件 用法:grep -r [string] [directory] 例如:grep -r hello . 该命令会在当前目录及子目录下所有包含“hello”字符串的文件搜索,并将匹配到的行输出到终端上。 总结: grep命令是一个非常实用的文本搜索工具,我们可以利用它来高效地搜索并处理我们需要的数据。上述仅是grep命令的基本语法和常用选项,想要更为深入地了解该命令,需要不断地在实践积累和学习。 ### 回答3: grep命令是Linux系统非常常用的命令之一,它的用途是搜索指定文本文件的指定字符串,并将包含该字符串的行打印出来。其用法非常简单,只需要在终端输入以下命令: grep "搜索字符串" 文件名 当然,在实际,我们通常使用的grep命令远不止这一个简单的用法。下面详细介绍grep命令的各种用法。 1.基本用法 grep命令最常用的用法就是查找文件的指定字符串,例如: grep "hello" file.txt 这个命令将会在file.txt文件搜索包含“hello”的行,并将所有找到的行打印出来。 2.指定多个文件 如果要在多个文件查找相同的字符串,可以使用通配符*来指定多个文件,例如: grep "hello" *.txt 这个命令将会搜索所有以.txt结尾的文件包含“hello”的行,并将所有找到的行打印出来。 3.忽略大小写 如果不关心字符串的大小写,可以使用-i参数来忽略大小写,例如: grep -i "hello" file.txt 这个命令将会在file.txt文件搜索包含“hello”或“Hello”或“HELLO”等字符串的行,并将所有找到的行打印出来。 4.递归搜索 如果要在一个目录及其子目录搜索指定字符串,可以使用-r参数来递归搜索,例如: grep -r "hello" /path/to/dir 这个命令将会在/path/to/dir目录及其所有子目录搜索包含“hello”的行,并将所有找到的行打印出来。 5.显示行号 如果要在文件显示包含指定字符串的行号,可以使用-n参数,例如: grep -n "hello" file.txt 这个命令将会在file.txt文件搜索包含“hello”的行,并将所有找到的行以及行号打印出来。 6.显示匹配部分 如果要在文件显示匹配指定字符串的部分,可以使用-o参数,例如: grep -o "hello" file.txt 这个命令将会在file.txt文件搜索包含“hello”的行,并将所有找到的“hello”单词打印出来。 7.反向查找 如果要查找不包含指定字符串的行,可以使用-v参数,例如: grep -v "hello" file.txt 这个命令将会在file.txt文件搜索不包含“hello”的行,并将所有找到的行打印出来。 总之,grep命令非常灵活,可以根据不同的需求进行各种细致精准的搜索。不过需要注意的是,尤其在使用递归搜索的时候,要确保指定目录下的文件确实有读权限,否则grep命令可能会无法工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值