2024年Linux文本处理grep详解_删除grep过滤的内容 linux,2024年最新2024谈一下当下最合适的Linux运维架构

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

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

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

#输出结果同上面命令相同


注意,虽然执行结果相同,但第一行代表是以键盘作为输入设备,而第二行代码是以 /etc/passwd 文件作为输入设备。


【例 2】


[root@localhost ~]# cat << 0  
 >c.biancheng.net  
 >Linux  
 >0  
 c.biancheng.net  
 Linux


可以看到,当指定了 0 作为分界符之后,只要不输入 0,就可以一直输入数据。


【例 3】  
 首先,新建文本文件 a.tx,然后执行如下命令:



[root@localhost ~]# cat a.txt
[root@localhost ~]# cat < /etc/passwd > a.txt
[root@localhost ~]# cat a.txt
#输出了和 /etc/passwd 文件内容相同的数据


可以看到,通过重定向 /etc/passwd 作为输入设备,并输出重定向到 a.txt,最终实现了将 /etc/passwd 文件中内容复制到 a.txt 中。


### Linux输出重定向


相较于输入重定向,我们使用输出重定向的频率更高。并且,和输入重定向不同的是,输出重定向还可以细分为标准输出重定向和错误输出重定向两种技术。


例如,使用 ls 命令分别查看两个文件的属性信息,但其中一个文件是不存在的,如下所示:



[root@localhost ~]# touch demo1.txt
[root@localhost ~]# ls -l demo1.txt
-rw-rw-r–. 1 root root 0 Oct 12 15:02 demo1.txt
[root@localhost ~]# ls -l demo2.txt <-- 不存在的文件
ls: cannot access demo2.txt: No such file or directory


上述命令中,demo1.txt 是存在的,因此正确输出了该文件的一些属性信息,这也是该命令执行的标准输出信息;而 demo2.txt 是不存在的,因此执行 ls 命令之后显示的报错信息,是该命令的错误输出信息。



> 
> 再次强调,要想把原本输出到屏幕上的数据转而写入到文件中,这两种输出信息就要区别对待。
> 
> 
> 


在此基础上,标准输出重定向和错误输出重定向又分别包含清空写入和追加写入两种模式。因此,对于输出重定向来说,其需要用到的符号以及作用如表 2 所示。




| 命令符号格式 | 作用 |
| --- | --- |
| 命令 > 文件 | 将命令执行的标准输出结果重定向输出到指定的文件中,如果该文件已包含数据,会清空原有数据,再写入新数据。 |
| 命令 2> 文件 | 将命令执行的错误输出结果重定向到指定的文件中,如果该文件中已包含数据,会清空原有数据,再写入新数据。 |
| 命令 >> 文件 | 将命令执行的标准输出结果重定向输出到指定的文件中,如果该文件已包含数据,新数据将写入到原有内容的后面。 |
| 命令 2>> 文件 | 将命令执行的错误输出结果重定向到指定的文件中,如果该文件中已包含数据,新数据将写入到原有内容的后面。 |
| 命令 >> 文件 2>&1 或者 命令 &>> 文件 | 将标准输出或者错误输出写入到指定文件,如果该文件中已包含数据,新数据将写入到原有内容的后面。注意,第一种格式中,最后的 2>&1 是一体的,可以认为是固定写法。 |


【例 4】新建一个包含有 “Linux” 字符串的文本文件 Linux.txt,以及空文本文件 demo.txt,然后执行如下命令:



[root@localhost ~]# cat Linux.txt > demo.txt
[root@localhost ~]# cat demo.txt
Linux
[root@localhost ~]# cat Linux.txt > demo.txt
[root@localhost ~]# cat demo.txt
Linux <–这里的 Linux 是清空原有的 Linux 之后,写入的新的 Linux
[root@localhost ~]# cat Linux.txt >> demo.txt
[root@localhost ~]# cat demo.txt
Linux
Linux <–以追加的方式,新数据写入到原有数据之后
[root@localhost ~]# cat b.txt > demo.txt
cat: b.txt: No such file or directory <-- 错误输出信息依然输出到了显示器中
[root@localhost ~]# cat b.txt 2> demo.txt
[root@localhost ~]# cat demo.txt
cat: b.txt: No such file or directory <–清空文件,再将错误输出信息写入到该文件中
[root@localhost ~]# cat b.txt 2>> demo.txt
[root@localhost ~]# cat demo.txt
cat: b.txt: No such file or directory
cat: b.txt: No such file or directory <–追加写入错误输出信息


## Linux grep命令详解:查找文件内容


很多时候,我们并不需要列出文件的全部内容,而是从文件中找到包含指定信息的那些行,要实现这个目的,可以使用 grep 命令。


grep 命令作为 Linux 文本处理三剑客的一员,另外两个是 sed 和 awk,它们会在后续章节中作详细介绍。


grep 命令的由来可以追溯到 UNIX 诞生的早期,在 UNIX 系统中,搜索的模式(patterns)被称为正则表达式(regular expressions),为了要彻底搜索一个文件,有的用户在要搜索的字符串前加上前缀 global(全面的),一旦找到相匹配的内容,用户就像将其输出(print)到屏幕上,而将这一系列的操作整合到一起就是 global regular expressions print,而这也就是 grep 命令的全称。


grep命令能够在一个或多个文件中,搜索某一特定的字符模式(也就是正则表达式),此模式可以是单一的字符、字符串、单词或句子。


正则表达式是描述一组字符串的一个模式,正则表达式的构成模仿了数学表达式,通过使用操作符将较小的表达式组合成一个新的表达式。正则表达式可以是一些纯文本文字,也可以是用来产生模式的一些特殊字符。为了进一步定义一个搜索模式,grep 命令支持如表 1 所示的这几种正则表达式的元字符(也就是通配符)。




| 通配符 | 功能 |
| --- | --- |
| c\* | 将匹配 0 个(即空白)或多个字符 c(c 为任一字符)。 |
| . | 将匹配任何一个字符,且只能是一个字符。 |
| [xyz] | 匹配方括号中的任意一个字符。 |
| [^xyz] | 匹配除方括号中字符外的所有字符。 |
| ^ | 锁定行的开头。 |
| $ | 锁定行的结尾。 |


需要注意的是,在基本正则表达式中,如通配符 \*、+、{、|、( 和 )等,已经失去了它们原本的含义,而若要恢复它们原本的含义,则要在之前添加反斜杠 \,如 \*、+、{、|、( 和 )。


grep 命令是用来在每一个文件或中(或特定输出上)搜索特定的模式,当使用 grep 时,包含指定字符模式的每一行内容,都会被打印(显示)到屏幕上,但是使用 grep 命令并不改变文件中的内容。


grep 命令的基本格式如下:


[root@localhost ~]# grep [选项] 模式 文件名


这里的模式,要么是字符(串),要么是正则表达式。而此命令常用的选项以及各自的含义如表 2 所示。




| 选项 | 含义 |
| --- | --- |
| -c | 仅列出文件中包含模式的行数。 |
| -i | 忽略模式中的字母大小写。 |
| -l | 列出带有匹配行的文件名。 |
| -n | 在每一行的最前面列出行号。 |
| -v | 列出没有匹配模式的行。 |
| -w | 把表达式当做一个完整的单字符来搜寻,忽略那些部分匹配的行。 |


注意,如果是搜索多个文件,grep 命令的搜索结果只显示文件中发现匹配模式的文件名;而如果搜索单个文件,grep 命令的结果将显示每一个包含匹配模式的行。


【例 1】假设有一份 emp.data 员工清单,现在要搜索此文件,找出职位为 CLERK 的所有员工,则执行命令如下:


[root@localhost ~]# grep CLERK emp.data  
 #忽略输出内容


而在此基础上,如果只想知道职位为 CLERK 的员工的人数,可以使用“-c”选项,执行命令如下:


[root@localhost ~]# grep -c CLERK emp.data  
 #忽略输出内容


【例 2】搜索 emp.data 文件,使用正则表达式找出以 78 开头的数据行,执行命令如下:


[root@localhost ~]# grep ^78 emp.data  
 #忽略输出内容


grep 命令的功能非常强大,通过利用它的不同选项以及变化万千的正则表达式,可以获取任何我们所需要的信息。本节所介绍的 grep 命令,只介绍了它的一部分基础知识,比如说,grep 命令可用的选项还有很多,且用法也五花八门,不过对于初学者来说,本节所介绍的内容已经足以应付多数 Linux 系统的日常工作了。


### 正则表达式


#### **2.1 认识正则**


(1)介绍


正则表达式应用广泛,在绝大多数的编程语言都可以完美应用,在Linux中,也有着极大的用处。


使用正则表达式,可以有效的筛选出需要的文本,然后结合相应的支持的工具或语言,完成任务需求。


在本篇博客中,我们使用grep/egrep来完成对正则表达式的调用


(2)正则表达式类型


正则表达式可以使用正则表达式引擎实现,正则表达式引擎是解释正则表达式模式并使用这些模式匹配文本的基础软件。


在Linux中,常用的正则表达式有:


* POSIX 基本正则表达式(BRE)引擎
* POSIX 扩展正则表达式(BRE)引擎


#### **2.2 基本正则表达式**


##### **2.2.1 匹配字符**


(1)格式


* . 匹配任意单个字符,不能匹配空行
* [] 匹配指定范围内的任意单个字符
* [^] 取反
* [:alnum:] 或 [0-9a-zA-Z]
* [:alpha:] 或 [a-zA-Z]
* [:upper:] 或 [A-Z]
* [:lower:] 或 [a-z]
* [:blank:] 空白字符(空格和制表符)
* [:space:] 水平和垂直的空白字符(比[:blank:]包含的范围广)
* [:cntrl:] 不可打印的控制字符(退格、删除、警铃…)
* [:digit:] 十进制数字 或[0-9]
* [:xdigit:]十六进制数字
* [:graph:] 可打印的非空白字符
* [:print:] 可打印字符
* [:punct:] 标点符号


(2)演示


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


##### **2.2.2 配置次数**


(1)格式


* \*\*\*\*\* 匹配前面的字符任意次,**包括0次**,贪婪模式:尽可能长的匹配
* **.\*** 任意长度的任意字符,**不包括0次**
* **?** 匹配其前面的字符**0 或 1次**
* **+** 匹配其前面的字符**至少1次**
* {n} 匹配前面的字符n次
* {m,n} 匹配前面的字符至少m 次,至多n次
* {,n} 匹配前面的字符至多n次
* {n,} 匹配前面的字符至少n次


(2)演示


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


### 最后的话

最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!

### 资料预览

给大家整理的视频资料:

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

给大家整理的电子书资料:

  

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



**如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!**

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

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


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



**如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!**

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

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


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

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值