摘要:使用grep
命令,实现在命令行当中搜索指定文本。
概念简介
grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。用于过滤/搜索的特定字符。可使用正则表达式能配合多种命令使用,使用上十分灵活。
Unix 的 grep 家族包括 grep、egrep 和 fgrep。egrep 和 fgrep 的命令只跟 grep 有很小不同。egrep 是 grep 的扩展,支持更多的 re 元字符, fgrep 就是 fixed grep 或 fast grep,它们把所有的字母都看作单词,也就是说,正则表达式中的元字符表示回其自身的字面意义,不再特殊。linux 使用 GNU 版本的 grep。它功能更强,可以通过-G、-E、-F 命令行选项来使用 egrep 和 fgrep 的功能。这里我们使用的是常规的 grep 命令。
语法格式: grep [参数]
例 1: 在文件中搜索一个单词,命令会返回一个包含 “match_pattern” 的文本行:
1 | grep match_pattern file_name |
例 2: 在多个文件中查找:
1 | grep "match_pattern" file_1 file_2 file_3 ... |
grep 中的正则表达式语法
1 | ^ # 锚定行的开始 如:'^grep'匹配所有以grep开头的行。 |
易混淆概念 · 通配符
功能定位区别:通配符是用来匹配文件名,进行文件名的查找,而正则表达式是用来匹配文件/返回的文本里内容的,我们常用的 grep 命令,交给管道符之后使用 grep 已经不是匹配文件名了,这是对文件的操作,并不是匹配文件名。
通配符一般用于 linux 的 shell 命令中,例如:
grep hello *
这表示在当前目录下的 所有文件 中查找含“hello”字符串的文件的行。
下面列出一些通配符的含义:
1 | [a-z]或[12]:匹配方括号中指定范围内的单个字符或方括号列出的其中一个字符。 |
使用实例
1、输出 list.txt 文件中,匹配字符串 “text” 的行号
1 | 使用 -n 参数: |
2、找出文件夹中,以 .txt
结尾的文件
1 | # ls | grep -n ".txt$" |
3、找出文件夹中,以 h 开头,txt 结尾的文件
1 | # grep -n "^h.\{1,\}txt$" |
4、查找命令行使用历史记录当中,包含 cd
的记录
1 | # history | grep cd |