(grep) - 强大的文本搜索工具

grep

强大的文本搜索工具

补充说明

grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。用于过滤/搜索的特定字符。可使用正则表达式能多种命令配合使用,使用上十分灵活。

选项

-a --text  # 不要忽略二进制数据。
-A <显示行数>   --after-context=<显示行数>   # 除了显示符合范本样式的那一行之外,并显示该行之后的内容。
-b --byte-offset                           # 在显示符合范本样式的那一行之外,并显示该行之前的内容。
-B<显示行数>   --before-context=<显示行数>   # 除了显示符合样式的那一行之外,并显示该行之前的内容。
-c --count    # 计算符合范本样式的列数。
-C<显示行数> --context=<显示行数>或-<显示行数> # 除了显示符合范本样式的那一列之外,并显示该列之前后的内容。
-d<进行动作> --directories=<动作>  # 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep命令将回报信息并停止动作。
-e<范本样式> --regexp=<范本样式>   # 指定字符串作为查找文件内容的范本样式。
-E --extended-regexp             # 将范本样式为延伸的普通表示法来使用,意味着使用能使用扩展正则表达式。
-f<范本文件> --file=<规则文件>     # 指定范本文件,其内容有一个或多个范本样式,让grep查找符合范本条件的文件内容,格式为每一列的范本样式。
-F --fixed-regexp   # 将范本样式视为固定字符串的列表。
-G --basic-regexp   # 将范本样式视为普通的表示法来使用。
-h --no-filename    # 在显示符合范本样式的那一列之前,不标示该列所属的文件名称。
-H --with-filename  # 在显示符合范本样式的那一列之前,标示该列的文件名称。
-i --ignore-case    # 忽略字符大小写的差别。
-l --file-with-matches   # 列出文件内容符合指定的范本样式的文件名称。
-L --files-without-match # 列出文件内容不符合指定的范本样式的文件名称。
-n --line-number         # 在显示符合范本样式的那一列之前,标示出该列的编号。
-q --quiet或--silent     # 不显示任何信息。
-R/-r  --recursive       # 此参数的效果和指定“-d recurse”参数相同。
-s --no-messages  # 不显示错误信息。
-v --revert-match # 反转查找。
-V --version      # 显示版本信息。   
-w --word-regexp  # 只显示全字符合的列。
-x --line-regexp  # 只显示全列符合的列。
-y # 此参数效果跟“-i”相同。
-o # 只输出文件中匹配到的部分。

规则表达式

^    # 锚定行的开始 如:'^grep'匹配所有以grep开头的行。    
$    # 锚定行的结束 如:'grep$'匹配所有以grep结尾的行。    
.    # 匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p。    
*    # 匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟grep的行。    
.*   # 一起用代表任意字符。   
[]   # 匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。    
[^]  # 匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。    
\(..\)  # 标记匹配字符,如'\(love\)',love被标记为1。    
\<      # 锚定单词的开始,如:'\<grep'匹配包含以grep开头的单词的行。    
\>      # 锚定单词的结束,如'grep\>'匹配包含以grep结尾的单词的行。    
x\{m\}  # 重复字符x,m次,如:'0\{5\}'匹配包含5个o的行。    
x\{m,\}   # 重复字符x,至少m次,如:'o\{5,\}'匹配至少有5个o的行。    
x\{m,n\}  # 重复字符x,至少m次,不多于n次,如:'o\{5,10\}'匹配5--10个o的行。   
\w    # 匹配文字和数字字符,也就是[A-Za-z0-9],如:'G\w*p'匹配以G后跟零个或多个文字或数字字符,然后是p。   
\W    # \w的反置形式,匹配一个或多个非单词字符,如点号句号等。   
\b    # 单词锁定符,如: '\bgrep\b'只匹配grep。  

grep命令常见用法

在文件中搜索一个单词,命令会返回一个包含 “match_pattern” 的文本行:

grep match_pattern file_name
grep "match_pattern" file_name

在多个文件中查找:

grep "match_pattern" file_1 file_2 file_3 ...

输出除之外的所有行 -v 选项:

grep -v "match_pattern" file_name

标记匹配颜色 --color=auto 选项:

grep "match_pattern" file_name --color=auto

使用正则表达式 -E 选项:

grep -E "[1-9]+"
或
egrep "[1-9]+"

只输出文件中匹配到的部分 -o 选项:

echo this is a test line. | grep -o -E "[a-z]+\."
line.

echo this is a test line. | egrep -o "[a-z]+\."
line.

统计文件或者文本中包含匹配字符串的行数 -c 选项:

grep -c "text" file_name

输出包含匹配字符串的行数 -n 选项:

grep "text" -n file_name
或
cat file_name | grep "text" -n

#多个文件
grep "text" -n file_1 file_2

打印样式匹配所位于的字符或字节偏移:

echo gun is not unix | grep -b -o "not"
7:not

#一行中字符串的字符便宜是从该行的第一个字符开始计算,起始值为0。选项  **-b -o**  一般总是配合使用。

搜索多个文件并查找匹配文本在哪些文件中:

grep -l "text" file1 file2 file3...

grep递归搜索文件

在多级目录中对文本进行递归搜索:

grep "text" . -r -n
# .表示当前目录。

忽略匹配样式中的字符大小写:

echo "hello world" | grep -i "HELLO"
hello

选项 -e 制动多个匹配样式:

echo this is a text line | grep -e "is" -e "line" -o
is
line

#也可以使用 **-f** 选项来匹配多个样式,在样式文件中逐行写出需要匹配的字符。
cat patfile
aaa
bbb

echo aaa bbb ccc ddd eee | grep -f patfile -o

在grep搜索结果中包括或者排除指定文件:

#只在目录中所有的.php和.html文件中递归搜索字符"main()"
grep "main()" . -r --include *.{php,html}

#在搜索结果中排除所有README文件
grep "main()" . -r --exclude "README"

#在搜索结果中排除filelist文件列表里的文件
grep "main()" . -r --exclude-from filelist

使用0值字节后缀的grep与xargs:

# 测试文件:
echo "aaa" > file1
echo "bbb" > file2
echo "aaa" > file3

grep "aaa" file* -lZ | xargs -0 rm

#执行后会删除file1和file3,grep输出用-Z选项来指定以0值字节作为终结符文件名(\0),xargs -0 读取输入并用0值字节终结符分隔文件名,然后删除匹配文件,-Z通常和-l结合使用。

grep静默输出:

grep -q "test" filename
# 不会输出任何信息,如果命令运行成功返回0,失败则返回非0值。一般用于条件测试。

打印出匹配文本之前或者之后的行:

# 显示匹配某个结果之后的3行,使用 -A 选项:
seq 10 | grep "5" -A 3
5
6
7
8

# 显示匹配某个结果之前的3行,使用 -B 选项:
seq 10 | grep "5" -B 3
2
3
4
5

# 显示匹配某个结果的前三行和后三行,使用 -C 选项:
seq 10 | grep "5" -C 3
2
3
4
5
6
7
8

# 如果匹配结果有多个,会用“--”作为各匹配结果之间的分隔符:
echo -e "a\nb\nc\na\nb\nc" | grep a -A 1
a
b
--
a
b

热点新闻

大众CEO:相信特斯拉会成为全球市值最高公司

最近是财报密集期,由于遭受疫情等因素的冲击不同,厂商们的成绩单呈现出喜忧参半的局面。其中,特斯拉的二季度表现超出预期,公司在当季取得了盈利。对此,友商大众集团的CEO Herbert Diess在LinkedIn上回应特斯拉的表现时,做出令人意外的预测,他认为特斯拉有机会在5到10年内成为全球市值最高的公司。 阅读全文

发布于:2020-07-29T08:44:53Z  |  166次阅读  |  详细内容 »

ofo这回真跑路了 欠款20亿,退押金等500年也没戏

几乎在现有的一切公开渠道中,都无法再找到ofo的踪影。据媒体报道,ofo从官网、App、乃至公众号都切断了与外界的联系。其App上的机器人客服只会重复回复 “请您耐心等待”,拨打人工客服电话更是无法接通。而ofo此前公开过的两个办公地址,一处早已人去楼空,另一处更是无人知晓其存在。一夜之间,ofo似乎人间蒸发了。 阅读全文

发布于:2020-07-29T18:44:46Z  |  114次阅读  |  详细内容 »

科学家利用真菌为深空宇航员打造活体防护罩

在人类希望将机组人员送入深空飞行任务时,全世界科学家和研究人员面临的最重大挑战之一是如何保护他们免受辐射。空间辐射可能是一个重大挑战,并对航天器内的宇航员构成风险。一组研究人员在先进的被动辐射防护系统上有了一个有趣的发现,该系统使用了某些类型的真菌。 阅读全文

发布于:2020-07-29T01:14:49Z  |  84次阅读  |  详细内容 »

“卸载支付宝不还花呗”玩不转了 花呗开始接入央行征信

7月28日,“花呗部分用户接入央行征信”这一话题带着网友的各种疑问冲上热搜。支付宝客服表示,目前只是部分用户群接入了央行征信,未来会对用户全量覆盖。根据客服的提示,在花呗《相关合同及产品说明》中,如果有《个人用户信息查询报送授权书》,那么你的信息已经接入征信。如果仅有《花呗服务协议》、《芝麻服务协议》以及产品说明则你的相关信息还没接入征信。 阅读全文

发布于:2020-07-29T14:14:54Z  |  83次阅读  |  详细内容 »

特斯拉:上半年获得了薪资相关政府福利以抵消疫情影响

北京时间7月29日凌晨消息,特斯拉在周二向美国证券交易委员会(SEC)提交的一份监管申报文件中表示,上半年政府向该公司提供了薪资相关福利以帮助减少新冠病毒大流行对其业务的影响。在美国国会讨论新一轮刺激计划之际,特斯拉CEO埃隆·马斯克(Elon Musk)曾称其反对进一步的政府援助。 阅读全文

发布于:2020-07-29T08:44:38Z  |  79次阅读  |  详细内容 »

大容量+大功率:市售7款热门100W快充充电宝选购指南

不知道从什么时候开始,移动电源也在发生着变化,当然本质上还是为设备提供额外的电力支持,但是服务的对象却越来越模糊,最开始仅为手机提供充电服务,到后面为平板甚至笔记本提供充电,充电的性能越来越强,接口越来越丰富,这一切都在悄然的发生着变化。 阅读全文

发布于:2020-07-29T02:44:52Z  |  79次阅读  |  详细内容 »

vivo S7正面照曝光 骁龙765G处理器 小刘海+超窄下巴

近日,vivo官方宣布8月3日将举行新品发布会,届时将推出S系列新机S7。7月29日消息,数码博主@Ark咔嚓一下 曝光了vivo S7的正面照,采用了小刘海+超窄下巴设计。从曝光的图片信息来看,该机型号为V2020A,运行基于Android 10的FunTouch OS 10.5操作系统。将搭载高通骁龙765G处理器,配备8GB运存和128GB储存。 阅读全文

发布于:2020-07-29T15:45:00Z  |  78次阅读  |  详细内容 »

不粘锅涂层被称为“塑料王” 长期使用会致癌?

炒菜粘锅可能是每个厨房新手的痛,尤其是烹饪肉类食物的时候,一顿操作下来,锅里多半变成了黏糊糊、黑乎乎的一片。更难受的是做出来的菜既不好看也不好吃,洗还要费老半天功夫。因此,不粘锅成了如今很多“小当家”们的厨房救星。 阅读全文

发布于:2020-07-29T02:44:39Z  |  77次阅读  |  详细内容 »

[图]越狱工具Odyssey Beta 2发布:适用于iOS 13-13.5

虽然苹果已经不再签署 iOS 13.5/13.5.1 了,但 CoolStar 团队日前发布了 Odyssey 越狱工具的第二个公测版本。此前有消息称,Unc0ver 团队向 CoolStar 团队提交了 DMCA 通知,要求下架后者的 GitHub 代码仓库。目前最终的判决还没有公布,不过对于普通用户来说又多了一个新的越狱工具。 阅读全文

发布于:2020-07-29T07:14:37Z  |  76次阅读  |  详细内容 »

盖茨“建议”马斯克:不要过多谈论新冠疫苗 专心造车和火箭

微软联合创始人比尔·盖茨日前在接受CNBC采访时特地提到了特斯拉和SpaceX CEO埃隆·马斯克(Elon Musk),盖茨认为后者不应该就自己并不擅长的领域发表过多看法,而是应该专注于自己的工作。他表示:“他(马斯克)的定位是维持高水平的离谱评论。他对疫苗的参与不多,但他制造了很不错的电动汽车,火箭领域的工作也做得很好。所以他被允许说这些话,(但)我希望他不要混淆他并没有过多涉足的领域。” 阅读全文

发布于:2020-07-29T10:15:03Z  |  73次阅读  |  详细内容 »

泰勒斯威夫特最新专辑Folklore创下苹果音乐专辑发行新纪录

泰勒·斯威夫特(Taylor Swift)的新专辑《Folklore》自上周意外发行以来,创下了苹果音乐上播放最多的流行专辑新高记录,24小时内达到3547万次播放。根据泰勒·斯威夫特Republic Records厂牌的数据,在Spotify上,这张歌手兼作曲家的第八张录音室专辑在推出的前24小时内就获得了7940万次播放。 阅读全文

发布于:2020-07-29T05:44:42Z  |  73次阅读  |  详细内容 »

比尔·盖茨:美国核酸检测速度太慢 多数都是“彻底的浪费”

亿万富翁慈善家比尔-盖茨(Bill Gates)周二表示,大多数美国新冠病毒检测都是“彻底的浪费”,因为人们要花很长时间才能获得病毒检测结果,以便确诊后进行自我隔离。美国总统特朗普曾吹捧美国的病毒检测能力已经大幅提高,但检测花费时间太长,许多卫生官员表示这对于阻止病毒爆发并没有帮助。 阅读全文

发布于:2020-07-29T02:44:27Z  |  73次阅读  |  详细内容 »

抖音在美业务威胁再升级 特朗普要禁止TikTok运营?

美国对中国科技公司的威胁再度升级!特朗普当地时间7月31日在其专机“空军一号”上对媒体记者表示,他将禁止TikTok在美国运营,最早于周六(即8月1日)实施,并且暗示他不会支持美国公司去收购TikTok。这是TikTok一周内在美国遭遇的第二次政府打压,本周美国财政部刚刚提交审查建议。 阅读全文

发布于:2020-08-01T21:14:31Z  |  68次阅读  |  详细内容 »

微软首次公布GitHub产品路线图

微软于今日首次公布了 GitHub 产品路线图,以便开发者预先了解 GitHub 团队正在打造的项目。这个新建的公共信息库允许任何人访问,除了做好在未来几个季度内迎来新功能的准备,开发者还可积极地向开发团队提交反馈。感兴趣的开发者查看各个项目版块的更新预告,点击链接后即可跳转到相关详情页面。 阅读全文

发布于:2020-07-29T11:44:33Z  |  68次阅读  |  详细内容 »

中通快递收购海尔旗下日日顺乐家快递柜

界面新闻记者从多位知情人士处独家获悉,中通快递近日收购了海尔集团旗下的日日顺乐家智能快递柜。据知情人士透露,这一收购主要涉及日日顺乐家在全国铺设的约3万组智能快递柜。中通快递网点将以6000-7000元/组的价格认购当地的日日顺智能柜,并承担未来的场租、运营成本,这些快递柜可以承接中通及其他同行的快递包裹,为用户提供快速投放、自助取件服务。 阅读全文

发布于:2020-07-29T21:44:36Z  |  67次阅读  |  详细内容 »

花呗上征信了!而我却担心起未来的房贷……

用花呗在某宝上买一件衣服会上征信?用京东白条购物在征信报告中也能体现?近日,支付宝花呗表示,花呗接入央行征信了!正在以服务升级的模式接入央行征信,这也意味着用花呗的痕迹都会体现在征信报告上。不仅是花呗,从去年开始,京东白条就已经开始分批接入央行征信。银行会对这些互联网借贷用户“另眼相看”吗? 阅读全文

发布于:2020-07-30T02:14:27Z  |  66次阅读  |  详细内容 »

[动图]集锦功能现面向所有Android和iOS平台Edge用户开放

在今年 3 月,微软预告了一系列即将登陆 Microsoft Edge 的新功能,包括垂直标签、密码管理器等等。今天,微软宣布集锦(Collections)功能登陆 iOS 和 Android 平台,该功能能帮助用户整理链接、文本和其他内容,以便于未来使用。 阅读全文

发布于:2020-07-30T09:45:22Z  |  63次阅读  |  详细内容 »

热门Linux命令