惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
Secure Thoughts
Spread Privacy
Spread Privacy
S
Securelist
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Project Zero
Project Zero
G
GRAHAM CLULEY
Stack Overflow Blog
Stack Overflow Blog
爱范儿
爱范儿
Scott Helme
Scott Helme
S
Security Affairs
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园_首页
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
T
The Exploit Database - CXSecurity.com
The Hacker News
The Hacker News
雷峰网
雷峰网
N
News and Events Feed by Topic
宝玉的分享
宝玉的分享
O
OpenAI News
小众软件
小众软件
C
Cybersecurity and Infrastructure Security Agency CISA
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
V
Visual Studio Blog
I
Intezer
Martin Fowler
Martin Fowler
S
Security @ Cisco Blogs
A
Arctic Wolf
Engineering at Meta
Engineering at Meta
U
Unit 42
L
Lohrmann on Cybersecurity
Google Online Security Blog
Google Online Security Blog
Last Week in AI
Last Week in AI
T
Threat Research - Cisco Blogs
WordPress大学
WordPress大学
M
MIT News - Artificial intelligence
Schneier on Security
Schneier on Security
V2EX - 技术
V2EX - 技术
IT之家
IT之家
The Register - Security
The Register - Security
T
Tailwind CSS Blog
GbyAI
GbyAI
量子位
人人都是产品经理
人人都是产品经理
Recorded Future
Recorded Future
W
WeLiveSecurity
AWS News Blog
AWS News Blog
B
Blog RSS Feed
腾讯CDC
Hacker News - Newest:
Hacker News - Newest: "LLM"
Microsoft Security Blog
Microsoft Security Blog

博客园 - taizi

Redhat5 网络配置(转) RPM 用法 Beginning Linux Programming----The Standard I/O Library Beginning Linux Programming----Low-level File Access (3) Beginning Linux Programming----Low-level File Access (2) Beginning Linux Programming----Low-level File Access (1) Beginning Linux Programming----Library Functions Beginning Linux Programming----System Calls and Device Drivers 细细品味UNIX的数据流重定向(摘) /dev/null 和/dev/zero(摘) Beginning Linux Programming----Linux File Structure Beginning Linux Programming----shell脚本程序实例 Beginning Linux Programming----dialog Utility Beginning Linux Programming----Debugging Scripts Beginning Linux Programming----Here Documents Beginning Linux Programming----Command Execution,Arithmetic Expansion,Parameter Expansion Beginning Linux Programming----Find Bash提示小窍门 Beginning Linux Programming----Commands(2)
Beginning Linux Programming----Grep
taizi · 2008-03-14 · via 博客园 - taizi

Grep

grep这个命令的全称为:general regular expression parser

在我们的系统中搜索文件,我们使用的命令是:find。而在文件中搜索字符串,我们所使用的命令就是:grep。当然,我们也可以将grep跟随在find命令后面的-exec选项里,这毕竟是再普通不过的了。

grep命令的语法结构如下:

grep [options] PATTERN [FILES]

如果没有给出文件名,grep将所搜标准输出中内容。

接下来让我们来了解grep的几个主要选项:

OptionMeaning
-c不输出所匹配的行,只输出所匹配的行的数目
-E开启扩展表达式
-h禁止输出搜索到的文件名的前缀
-i所要忽略的状况,比如:忽略大小写
-l列出所匹配行的文件名,但不输出实际的匹配行
-v反转匹配模式查找只显示不匹配的行

下面让我们看一些简单的grep实例:

$ grep in words.txt
When shall we three meet again. In thunder, lighting, or in rain?
I come, Graymalkin!

第一个实例没有使用选项,它只在文件words.txt中搜索含有字符串“in”的匹配行并将之输出。文件名不会被输出,因为我们所搜索的只是一个文件。

$grep -c in words.txt words2.txt
words.txt:2
words2.txt:14

这个实例的结果是只计算在两个不同的文件中所匹配的行的数目。

$grep -c -v in words.txt words2.txt
words.txt:9
words2.txt:16

而这个实例因为使用的是-v选项,因此它的结果是只计算在两个不同的文件中不匹配的行的数目。

如你所见,grep的基本用法是多么的简单易学。现在让我们来看一下基本的规则表达式,它能让我们做一些更为复杂的模式匹配。在先前的学习中,我们知道规则表达式在linux和许多其他的开源语言中都有所涉及,比如我们可以在vi编辑器中以及写perl脚本时使用规则表达式。

在规则表达式中,有些特定的字符在使用时被赋予了特殊的意思,下面让我们来看看最经常使用到的特殊字符:

CharacterMeaning
^表示一行的开头
$表示一行的结尾
.表示任意一个字符
[ ]表示在方括号中的一系列字符,比如[a-e]表示从a到e范围之间的
字符,即abcde。另外若要表示相反的字符范围,在之前使用^,
比如说表示除了abcde之外的字符:[^a-e]。

如果你想正常使用上面的字符,而不是被赋予的特殊意思的话,在该字符前加转移字符\。即假使你想使用“$”,就要这样使用:\$ 。

下面是一些在方括号中使用的特殊匹配模式,当然它们也十分的重要,而且非常有用。

Match PatternMeaning
[:alnum:]字母数字字符
[:alpha:]字母
[:ascii:]ASCII字符
[:blank:]空格或者tab
[:cntrl:]ASCII控制字符
[:digit:]数字
[:graph:]非空字符(非空格、控制字符)
[:lower:]小写字母字符
[:print:]可印刷字符
[:punct:]标点符号字符
[:sapce:]所有空白字符,包括垂直tab
[:upper:]大写字母字符
[:xdigit:]十六进制数字

另外,如果要使用-E来扩展匹配的话,字符扩展集也是要指定的。下面的表格是其他用来控制完成匹配格式的字符,当它们同grep使用时需要在之前加上字符\。

OptionMeaning
?匹配是可选择的,但最多可以被匹配一次。
*必须被匹配零次或多次
+必须被匹配一次或多次
{n}必须被匹配n次
{n,}必须被匹配n次或多次
{n,m}必须被匹配次数可以从n次到m次

下面我们来看几个例子:

1. 搜索以e结尾的行

$ grep e$ words2.txt

2. 搜索以a结尾的单词

$ grep a[[:blank:]] words2.txt

3.搜索以th开头的单词,且单词长度仅为3。

$ grep th.[[:space::]] words2.txt

4.使用grep的扩展模式搜索长度为10的小写字母单词

$ grep -E [a-z]\{10\} words2.txt

上面只是让我们了解了一下规则表达式的重要性,如果你想了解更多更深入的信息,最好的方法就是查阅linux中的相关档案,并多做练习。