linux下grep常用命令使用

grep概述

grep 是类unix系统下的搜索工具,其全称为(global regular expression print,全局正则表达式输出)。

grep命令在对一个或多个文件的内容进行基于模式的搜索的情况下是非常有用的。模式可以是单个字符、多个字符、单个单词、或者是一个句子。当命令匹配到执行命令时指定的模式时,grep会将包含模式的一行输出,但是并不对原文件内容进行修改。

语法如下:

Usage: grep [OPTION]... PATTERN [FILE]...

Example: grep -i 'hello world' menu.h main.c
         grep -r 'hello world' /home/ 

常见命令使用

假设现在我们知道需要在哪几个文件里进行查找的情况下,我们可以直接指定文件名,
若只知道目录,则需要使用-r参数进行递归查找该目录下的所有文件。
为了测试,我们在/root目录下创建grep_case.txt 和grep_test.txt文件,其内容如下:
grep_case.txt

c++
linode free
home scholl
Jimmy
jimmy
china
fujian
beijing
csdn

grep_test.txt

grep man hello
word
Jimmy
jimmy
xterm
keep moving ~ csdn
192.168.127.111
a.cpp
b.cpp c.cpp
china fujian beijing usa

普通用法

case 01

查找文件中的某个字符串(csdn)

[root@li1544-92 ~]# grep csdn grep_test.txt 
keep moving ~ csdn

case 02

在多个文件中查找指定模式(csdn)

[root@li1544-92 ~]# grep csdn grep_test.txt  grep_case.txt 
grep_test.txt:keep moving ~ csdn
grep_case.txt:csdn

case 03

使用-l参数列出包含指定模式(csdn)的文件的文件名

[root@li1544-92 ~]# grep -l csdn grep_test.txt  grep_case.txt 
grep_test.txt
grep_case.txt

case 04

使用-n参数,在文件中查找指定模式并显示匹配行的行号

[root@li1544-92 ~]# grep -n csdn grep_test.txt  grep_case.txt 
grep_test.txt:6:keep moving ~ csdn
grep_case.txt:9:csdn

case 05

使用-v参数输出不包含指定模式的行

[root@li1544-92 ~]# grep -v csdn grep_test.txt
grep man hello
word
Jimmy
jimmy
xterm
192.168.127.111
a.cpp
test.cpp c.cpp
china fujian beijing usa

case 06
使用^符号输出所有以指定模式开头的行

[root@li1544-92 ~]# grep  ^china  grep_test.txt
china fujian beijing usa

case 07

使用$符号输出所有以指定模式结尾的行

[root@li1544-92 ~]# grep  usa$  grep_test.txt
china fujian beijing usa

case 08

使用 -r 参数递归地查找特定模式,当文件名是目录时,必须使用-r参数

[root@li1544-92 ~]# grep -r  china  /root/
/root/grep_test.txt:china fujian beijing usa
/root/grep_case.txt:china

-r参数将使得grep命令在/root目录的所有文件中查找符合该模式的行

case 09

使用 -i 参数查找模式
grep命令的-i参数在查找时忽略字符的大小写

[root@li1544-92 ~]# grep -i jimmy  ./grep_test.txt 
Jimmy
jimmy

case 10

使用 -e 参数查找多个模式
我们想在一个grep命令中查找jimmy 和 csdn 这两个字符串可以使用-e参数,

例如:

[root@li1544-92 ~]# grep -ie jimmy -e csdn ./grep_test.txt 
Jimmy
jimmy
keep moving ~ csdn

case 11

我们也可以将需要匹配的模式写作文件中,一行一个模式,此时可以使用 -f参数进行查找和匹配.

此时模式由grep_pattern文件指定,查找/root目录下的所有文件

grep_pattern文件内容如下:

[root@li1544-92 ~]# cat grep_pattern 
xterm
csdn$ 
beijing

使用文件查找符合指定模式的行

[root@li1544-92 ~]# grep -rf ./grep_pattern  /root/
/root/grep_pattern:xterm
/root/grep_pattern:beijing
/root/grep_test.txt:xterm
/root/grep_test.txt:keep moving ~ csdn
/root/grep_test.txt:china fujian beijing usa
/root/grep_case.txt:beijing
/root/grep_case.txt:csdn

高级用法

grep命令一般情况下支持基本正则表达式,我们可以通过参数-E支持扩展正则表达式,另外grep单独提供了一个扩展命令叫做egrep用来支持扩展正则表达式,这条命令和grep -E等价。其中扩展正则表达式支持的字符有: ‘+’,‘?’, ‘|’ ,’()’ 这四个。

我们在grep_test.txt文件中增加以下字符串用于测试:

good 
goood
glad
gd
god

下面举几个例子进行说明:

case 01

查找所有的以.cpp为结尾的字符串
. 代表任意字符 * 代表0到多个

[root@li1544-92 ~]# grep .*\.cpp$ grep_test.txt 
a.cpp
test.cpp c.cpp

case 01

查找所有的以.cpp为结尾的字符串
. 代表任意字符 * 代表0到多个 这里仅用基本正则表达式

[root@li1544-92 ~]# grep .*\.cpp$ grep_test.txt 
a.cpp
test.cpp c.cpp

case 02

查找所有的类似god good等以g开头d结尾中间1一个以上o的字符串。
其命令如下:
其中+代码重复前面字符1到多次

[root@li1544-92 ~]# egrep go+d  grep_test.txt (或者grep -E)
good 
goood
god

其中基本正则表达式和扩展正则表达式说明参见
https://blog.csdn.net/lkforce/article/details/52862193

需要补充两点说明:

  1. 使用-r进行目录查找时,最好不要指定根目录,由于范围太广查找很慢,不建议这么用
  2. 如果忘记grep可以选手可以使用grep --help或者man命令

如何使用可以参考该文章教你如何查看linux各个命令的用法和功能

参考文章:
https://linux.cn/article-5453-1.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值