Linux命令--grep--使用/教程/示例

本文详细介绍了Linux中grep命令的使用,包括基本语法、正则表达式支持、选项参数以及各种实用技巧。通过示例展示了如何搜索文件内容、进行上下文匹配、排除特定文件或目录,以及实现最短匹配等操作。grep命令是Linux系统中进行文本过滤和搜索的强大工具。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文网址:Linux命令--grep--使用/教程/示例_IT利刃出鞘的博客-CSDN博客

简介

说明

本文介绍Linux的grep命令的用法。

grep命令简介

grep命令用于搜索文件中的内容(字符串)。

grep支持 正则表达式。(而且默认使用正则表达式)

技巧

技巧说明

grep -e pattern1 | pattern2 files

或者grep pattern1\| pattern2 files

显示匹配 pattern1 或 pattern2 的行。

例: 递归查找有“hello”或者“hi”的文件

grep "hello\|hi" * -nsr   或者grep -e "hello|hi" * -nsr

grep pattern1 files | grep pattern2

显示既匹配 pattern1 又匹配 pattern2 的行

选项

选项

含义

-a 或 --text 

不要忽略二进制的数据。

-A  n 或 --after-context=<n>

显示匹配到的字符串所在的行及其后n行。  (after)

-b 或 --byte-offset

在显示符合样式的那一行之前,标示出该行第一个字符的编号。

-B  n 或 --before-context=<n>

显示匹配到的字符串所在的行及其前n行。(before)

-c

显示总共有多少行被匹配到了,而不是显示被匹配到的内容

-C  n

显示匹配到的字符串所在的行及其前后各n行。(context)

grep "hello" a.txt -C 10

--color

关键字高亮显示

-d <动作> 或 --directories=<动作>

当指定要查找的是目录而非文件时,必须使用这项参数。

比如:-d recurse

-e <范本样式> 或 --regexp=<范本样式>

将内容看为正则表达式。此时不需要加转义字符。

-E, --extended-regexp

将内容看为扩展的正则表达式(ERE)。此时不需要加转义字符。

--exclude=FILE_PATTERN

排除指定的文件(支持正则表达式)

--exclude-from=FILE

排除指定的文件来搜索(不支持正则表达式)

--exclude-dir=DIR_PATTERN

排除指定的目录来搜索(支持正则表达式)

-f<规则文件> 或 --file=<规则文件>

指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。

-F, --fixed-strings

将内容看为普通字符串,不使用正则表达式

-G, --basic-regexp

将引号内的内容看为基本的正则表达式(BRE)。此时需要加转义字符。

-h 或 --no-filename

查询多文件时不显示文件名。

-H 或 --with-filename

查询多文件时显示文件名

-i, --ignore-case

不区分大小写地搜索。默认情况区分大小写

--include=FILE_PATTERN

指定文件搜索(支持正则表达式)

-l 或 --file-with-matches

不区分大小写(只适用于单字符)

-l 或 --file-with-matches

查询多文件时只输出匹配的文件名,不输出内容。

-L 或 --file-without-matches

查询多文件时只输出不匹配的文件名,不输出内容。

-n

显示匹配行及行号

-o 或 --only-matching

只显示匹配PATTERN 部分

-P, --perl-regexp

使用Perl正则表达式。

-q 或 --quiet或--silent

不显示任何信息。

-R, -r

递归地。等价于:-d recurse

-s 或 --no-messages

不显示错误信息。

-v

不显示该匹配字符串。

例:查找带有“abc”但不带有“aaa”的行:grep abc | grep -v aaa

-w 或 --word-regexp

只匹配整个单词,而不是字符串的一部分(如匹配’magic’,而不是’magical’)

-x --line-regexp

只显示全列符合的列。

-y

和指定"-i"参数相同

示例

基本用法

命令

作用

grep "hello" * -nsr

在当前目录下的所有文件、目录中查找“hello”

grep "hello" * -nsr -C 3

在当前目录下的所有文件、目录中查找“hello”,并打印上下3行

grep "hello\|hi" * -nsr

在当前目录下的所有文件、目录中查找“hello”或“hi”

grep '^root|bash$' * -nsr

查找以 root 为行首的或以 bash 为行尾的行

grep "hello" kernel -nsr

在当前目录的kernel子目录中查找“hello”

grep "hello" a.txt -n

在当前目录的a.txt文件中查找“hello”

包含/不包含

命令

作用

grep "hello" --exclude-dir=dir1

在当前目录下查找除了dir1目录的hello

grep "hello" --exclude-dir={dir1,dir2}

在当前目录下查找除了dir1和dir2目录的hello

grep "hello" --include=*.{php,c} * -nswr

在当前目录及子目录的以.php和.c文件中搜索"hello"

特殊字符

命令

作用

grep -e ".hello" * -nsr 或

grep "\.hello" * -nsr

在当前目录下的所有文件、目录中查找“.hello”

grep -e "client->flags" * -nsr 或

grep "client\->flags" * -nsr

在当前目录下的所有文件、目录中查找“client->flags”

最短匹配

默认情况下,grep的+和*都是贪婪匹配:匹配最长的数据,例如:

echo "abcdbcdef" | grep "a.*c"

结果

最短匹配的方法

使用Perl模式(-P参数),然后在+或*后加一个?。

echo "abcdbcdef" | grep -P "a.*?c"

打印出所有匹配项

有的数据会匹配多个,例如:

echo "1234123456" | grep -P ".*?4"

结果

实际上这是匹配了两段,可以将匹配项单独打印出来:

其他

命令

作用

grep "TEXTBASE" * -nsr | grep "s3c2440"

找完TEXTBASE之后的结果再查找s3c2440。可达到指定s3c2440目录查找的类似效果

grep "hello" * -nsr | grep -v "word\|test"

在当前目录及子目录查找"hello",排除有world或test的行。

注意,加了-v会不高亮"hello",如果要高亮,则后边加一个| grep "hello"。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT利刃出鞘

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

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

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

打赏作者

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

抵扣说明:

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

余额充值