参考资料
-
Grep - An introduction to grep and egrep. How to search for strings inside of files.
-
在命令行输入
man grep
后看到的内容
正文
参考资料2 中举了不少具体的例子,我结合自己的理解也写了几个小例子,列举如下。
本文要用到的文件为 rank.txt
,其完整内容如下(其内容是 https://en.wikipedia.org/wiki/Template:Current_ITTF_Men%27s_World_Ranking
页面提供的乒乓球男单排名)
ITTF Men's World Ranking, as of October 2019[1]
# Player Points Move†
1 Xu Xin (CHN) 15,980 Steady
2 Fan Zhendong (CHN) 15,200 Steady
3 Ma Long (CHN) 14,955 Steady
4 Lin Gaoyuan (CHN) 14,885 Steady
5 Tomokazu Harimoto (JPN) 13,465 Steady
6 Hugo Calderano (BRA) 12,790 Steady
7 Timo Boll (GER) 12,445 Steady
8 Liang Jingkun (CHN) 12,190 Steady
9 Mattias Falck (SWE) 12,140 Steady
10 Lin Yun-ju (TPE) 11,055 Steady
11 Koki Niwa (JPN) 10,840 Steady
12 Dimitrij Ovtcharov (GER) 10,763 Steady
13 Jun Mizutani (JPN) 10,195 Steady
14 Jang Woo-jin (KOR) 10,070 Steady
15 Patrick Franziska (GER) 9,735 Steady
16 Wong Chun Ting (HKG) 9,690 Steady
17 Lee Sang-su (KOR) 9,615 Steady
18 Liam Pitchford (ENG) 9,500 Steady
19 Quadri Aruna (NGR) 8,965 Steady
20 Simon Gauzy (FRA) 8,500 Steady
下面举几个具体的例子
- 查看马龙的信息
# 方法1
# 在 rank.txt 中查找与 'Ma Long' 匹配的行
grep 'Ma Long' rank.txt
# 方法2
# 在 rank.txt 中查找与 'ma long' 匹配的行(不区分大小写)
grep -i 'ma long' rank.txt
效果如下图
image.png
在上图中我们可以看到马龙的排名是第三,于是就想顺便看看马龙前面两名是谁
- 查看马龙所在的行(称为L0)以及L0前面两行
# -B 选项中的 B 可以理解成 before context(可以参考 man grep)
grep -B 2 'Ma Long' rank.txt
效果如下图
image.png
- 查看马龙所在的行(称为L0)以及L0前后各两行
# -C 选项中的 C 可以理解成 context(可以参考 man grep)
grep -C2 'Ma Long' rank.txt
效果如下图
image.png
- 查看马龙所在的行(称为L0)以及L0后两行
# -A 选项中的 A 可以理解成 after context(可以参考 man grep)
grep -A 2 'Ma Long' rank.txt
效果如下图
image.png
- 查看日韩两国的选手信息
# -E 选项中的 E 可以理解为 extended regexp(扩展正则表达式),关于扩展正则表达式的介绍可以 参考https://www.grymoire.com/Unix/Regular.html 一文
grep -E 'KOR|JPN' rank.txt
效果如下图
image.png
- 查看剔除中国大陆选手后的所有选手的信息
# -v 选项中的 v 可以理解为 invert match(反向匹配,也就是说会将不匹配的行保留)
grep -v 'CHN' rank.txt
效果如下图
image.png
总结
本文简单展示了 grep
命令中 -A
-B
-C
-E
-i
-v
选项的用法,详细的讲解可以参考本文开头列举的参考资料
网友评论