grep是Linux/Unix系统中非常常用的命令,它用来在文本文件中查找指定的模式并输出文本行。

以下均以or-tools文件夹中的 Dependencies.txt文件为例,其内容如下:

1
2
3
4
5
6
7
8
9
10
11
Protobuf=v21.12
abseil-cpp=20230125.0
Cbc=2.10.7
Cgl=0.60.5
Clp=1.17.7
Clp=1.17.7
Osi=0.108.7
CoinUtils=2.11.6
Eigen=3.4.0
Re2=2021-11-01
Scip=v803

以下是grep命令的常用用法:

0. 递归查找

1
grep -r pattern directory

使用-r选项可以递归查找指定目录下所有文件,而不仅仅是当前目录。

例:我们在or-tools外层文件夹中执行以下命令:

1
grep -r Clp=1.17.7 or-tools/

即可找到Clp=1.17.7出现的两行。

接下来我们进入or-tools文件夹,直接对Dependencies.txt文件进行操作。

1. 简单模式匹配

1
grep pattern file

这个最简单的用法,会在指定的文件中查找匹配pattern的所有行。

例:我们找到所有包含Clp的行。

1
grep Clp Dependencies.txt

2. 忽略大小写匹配

1
grep -i pattern file

使用-i选项可以忽略大小写来查找匹配。

例:我们找到所有包含clp的行,忽略大小写。

1
grep -i clp Dependencies.txt

3. 显示匹配行数

1
grep -c pattern file

使用-c选项可以统计匹配的行数。

例:我们统计一下Clp出现的次数。

1
grep -c Clp Dependencies.txt

不同的选项可以组合使用,比如我们可以忽略大小写,统计一下clp出现的次数。

1
grep -ci clp Dependencies.txt

4. 输出不匹配的行

1
grep -v pattern file

使用-v选项可以输出不匹配pattern的所有行。

例:我们输出一下不包含Clp的行。

1
grep -v Clp Dependencies.txt

5. 输出匹配行的前后若干行

1
grep -A n -B m pattern file

使用-A-B选项可以输出匹配pattern的行的前后nm行。而-C选项则可以输出前后n行。

例:我们输出一下包含Clp的行的前后一行。

1
grep -A 1 -B 1 Clp Dependencies.txt

还有很多其他选项和使用方法,可以通过 man grep命令查看更多帮助和用法。