linux三剑客之grep命令详解

22 篇文章 1 订阅

linux三剑客之grep命令详解

grep是对文本进行过滤的工具,以行为单位,grep的主要作用就是与管道符和正则表达式结合使用,在linux三剑客的使用过程中,管道符和正则表达式特别重要。
之前文章说过,从管道符接受的数据为标准输入,所以grep支持从标准输入或者命令行获取参数,例如cat a.txt | grep 'hello'grep 'hello' a.txt都是可以的。

grep格式:

grep 功能参数 “正则表达式” 文件
…| grep 功能参数 “正则表达式”

grep常用参数:

功能参数解释
-c输出匹配到的行数,功能等同于wc -l
-i正则表达式忽略大小写
-l查询多文件时只输出包含匹配字符的文件名
-h查询多文件时不显示文件名
-n显示匹配行的行号
-s不显示文件不存在或无匹配文本的错误信息
-v显示不包含匹配文本的行
-A匹配行的后几行
-B匹配行的前几行
-E扩展正则表达式,等同于egrep

测试文件

[root@linuxforliuhj test]# cat -n song.txt 
     1  You make me feel so happy.
     2  Whenever Im with you.
     3  You make me feel so special.
     4  This love is too good to be true.
     5  Rosemary Anne Nash
     6  If you were a teardrop,In my eye,For fear of losing you,I would never cry。
     7  And if the golden sun,Should cease to shine its light.
     8  Just one smile from you,Would make my whole world bright.
     9  Hannah Jo Kee
    10  Since the first time I saw you,I felt something inside,
    11  I dont know if it's love at first sight,I do know I really like you a lot。 
    12  Tanya C Medeiros

1.统计grep命令过滤出的行数,使用-c参数

[root@linuxforliuhj test]# cat song.txt | grep -c 'ld'
3

grep -c等同于wc -l

[root@linuxforliuhj test]# cat song.txt | grep  'ld' | wc -l
3

2.使用正则表达式时忽略字母大小写,使用-i参数

[root@linuxforliuhj test]# cat song.txt  | grep '^if'
[root@linuxforliuhj test]# cat song.txt  | grep  -i '^if'
If you were a teardrop,In my eye,For fear of losing you,I would never cry。

3.过滤多文件时只显示包含匹配行的文件的文件名,使用-l参数
当使用命令cat song.txt song1.txt | grep -i 'tagya'时无法显示文件名,所以使用-l参数时无效

[root@linuxforliuhj test]# cp song.txt song1.txt
[root@linuxforliuhj test]# grep -i 'tanya' song.txt  song1.txt 
song.txt:Tanya C Medeiros
song1.txt:Tanya C Medeiros
[root@linuxforliuhj test]# grep -il 'tanya' song.txt  song1.txt 
song.txt
song1.txt
[root@linuxforliuhj test]# 

4.查询多文件时隐藏文件名,使用-h参数

[root@linuxforliuhj test]# grep -i 'tanya' song.txt  song1.txt  
song.txt:Tanya C Medeiros
song1.txt:Tanya C Medeiros
[root@linuxforliuhj test]# grep -ih 'tanya' song.txt  song1.txt 
Tanya C Medeiros
Tanya C Medeiros

5.显示匹配的行号,使用-n参数

[root@linuxforliuhj test]# grep -in 'tanya' song.txt  song1.txt  
song.txt:12:Tanya C Medeiros
song1.txt:12:Tanya C Medeiros
[root@linuxforliuhj test]# grep -ihn 'tanya' song.txt  song1.txt  
12:Tanya C Medeiros
12:Tanya C Medeiros

6.忽略文件不存在的报错,使用-s参数
当过滤的文件不存在时,会报错文件不存在,想要忽略此报错,需要使用-s参数

[root@linuxforliuhj test]# grep -i 'tanya' hello.sh  
grep: hello.sh: No such file or directory
[root@linuxforliuhj test]# grep -i -s 'tanya' hello.sh
[root@linuxforliuhj test]# 

7.显示不包含匹配出的行,使用-v参数

[root@linuxforliuhj test]# grep -in 'i' song.txt 
2:Whenever Im with you.
3:You make me feel so special.
4:This love is too good to be true.
6:If you were a teardrop,In my eye,For fear of losing you,I would never cry。
7:And if the golden sun,Should cease to shine its light.
8:Just one smile from you,Would make my whole world bright.
10:Since the first time I saw you,I felt something inside,
11:I dont know if its love at first sight,I do know I really like you a lot。 
12:Tanya C Medeiros
[root@linuxforliuhj test]# grep -inv 'i' song.txt 
1:You make me feel so happy.
5:Rosemary Anne Nash
9:Hannah Jo Kee
[root@linuxforliuhj test]# 

8.过滤匹配行的前几行或者后几行,使用-A或者-B参数
例如过滤以‘If’开头的行以及该行的前3行和后2行

[root@linuxforliuhj test]# grep -A 2 -B 3 '^If' song.txt   
You make me feel so special.
This love is too good to be true.
Rosemary Anne Nash
If you were a teardrop,In my eye,For fear of losing you,I would never cry。
And if the golden sun,Should cease to shine its light.
Just one smile from you,Would make my whole world bright.
[root@linuxforliuhj test]# 

9.包含转义字符的正则和扩展正则
包含转义的正则表达式和扩展正则表达式

10.传送门:linux之grep命令练习题

  • 2
    点赞
  • 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
发出的红包

打赏作者

Operose-honeybee

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值