总结
grep <expression> <filename>-E: 使用扩展正则表达式EREs-P: 使用Perl正则表达式PCREs推荐使用-r: 递归搜索-v: 反向匹配
- 在实际项目中,经常和
|管道结合使用<command> | grep <expression>
提问
- [x] 1. 如何匹配以
HELLO开头并以WORLD结尾的行grep -P '^HELLO.*WORLD$' [FILE...] - [x] 2. 如何匹配以
HELLO开头或以WORLD结尾的行grep -P '^HELLO|WORLD$' [FILE...]
1. 前提提要、场景
之前的章节学习了通配符、扩展通配符。通配符和正则不是一个东西
- 通配符:多用在文件名上,例如
find、ls、cp - 正则:多用在文本内容匹配/过滤上,例如
grep、less、vim中的搜索
而正则分为以下三种
- 基本的正则表达式(
Basic RegEx简称BREs) - 扩展的正则表达式(
Extended RegEx简称EREs) Perl的正则表达式(Perl Compatible Regular Expressions简称PCREs),JS的正则便是PCREs,推荐使用这个,更符合我们平常的使用习惯。
至于这三种的区别,可以网上了解。
总结:PCREs更符合我们的日常使用,推荐使用PCREs,前两者大部分是符号,例如数字在PCREs中为\d,在其他两种中为[[:digit:]]或[0-9]
Linux 三剑客(grep、sed、awk)之一。
本次要介绍的 grep 命令,Global Regular Expression (Processor | Parser | Printer) 的简写,可以在命令行中使用正则表达式,对文本内容进行匹配筛选。
grep 默认为使用基本正则表达式 BREs
-E: 使用扩展正则表达式EREs-P: 使用Perl正则表达式PCREs
grep 仅仅只是一个正则工具,功能实现的可能性取决于对正则的熟练度
2. 正则 匹配文本内容
命令:grep <expression> <filename>
sh
$ grep vue package.json

在实际项目中,经常和 | 管道结合使用
sh
# 过滤出带有 vue 的文件
$ ls -lah | grep vue
3. PCREs 更丰富的正则语法
命令:grep -P PATTERN [FILE...]
PCREs ( Perl Compatible Regular Expressions ) 拥有更丰富的正则语法。
在 Javascript/Python/Java 中,正则表达式便是基于 PCREs,推荐这种正则,更符合我们平常的使用习惯。
使用以下命令使用 PCREs
sh
# -P: 使用 PCRE 正则
$ grep -P '\s"vue' package.json

4. grep -r 递归搜索
命令:grep -r PATTERN [FILE...]
sh
# 在当前目录递归文件寻找 react
# -r / --recursive: 递归搜索
$ grep -r 'react' .

4. grep -v 反向匹配
命令:grep -v PATTERN [FILE...]
sh
# 打印不包含 vue 字符的行
# -v / --invert-match: 反选匹配
$ grep -v vue package.json
