本文最后更新于 2023-12-17,文章内容可能已经过时。

### 简介

> Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。

### 常用参数

```

grep :

-c 表示打印符合要求的行数

-i 表示忽略大小写

-n 表示输出符合要求的行及其行号

-v 表示打印不符合要求的行

-A 后面跟一个数字(有无空格都可以)例如 “-A2” 表示打印符合要求的行以及下面的两行

-B 后面跟一个数字 例如“-B2” 表示打印符合=要求的行以及上面的两行

-C 后面跟一个数字 例如“-C2” 表示打印符合要求的行以及上下各两行

-r 是递归查找

```

### 实例

```

grep -n ‘root’ /etc /passwd 过滤带有某个关键词的行并输出行号

grep -nv ‘root’ /etc/passwd 过滤不带有某个关键词的行并输出行号

grep ‘[0-9]’ /etc/passwd 过滤所有包含数字的行

grep -v ‘[0-9]’ /etc/passwd 过滤所有不包含数字的行

grep -v ‘^#’ 删除所有已“#”开头的行

grep -v ‘^#’/etc/crontab |grep -v ‘^$’ 删除所有的空行和以’#’开头的行

```

在正则表达式中“^”表示行的开始,“$”表示行的结尾,空行用“^$”表示

“[^字符]”表示除[]内的字符之外的字符

过滤任意一个字符和重复的字符:`grep ‘r..o’ /etc/passwd` “.“表示任意一个字符 “r..o”表示把r与o之间有两个任意字符的行过滤出来。

“”表示零个或多个前面的的字符, “ooo” 表示 oo ooo ooo或者更多的o.

grep ‘r..o’ /etc/passwd

“.*” 表示零个或者多个任意字符,空行也包含在内。

grep ‘.*’ /etc/passwd |wc -l

指定要过滤的字符的出现次数

grep ‘0\{2\}’ /etc/passwd

{}其内部为数字,表示前面的字符要重复出现的次数,需要强调的是,{}左右都需要加上脱义字符“\”。另外“{}”还可以表示一个范围,具体格式为“{n1,n2}”

筛选 一个或者多个前面的字符

```

egrep ‘o+’ test.txt

egrep ‘oo+’ test.txt

egrep ‘ooo+’ text.txt

```

筛选零个或者一个前面的字符

```

egrep ‘o?’ test.txt

‘oo?’

‘ooo?’

```

筛选字符串1或者字符串2

```

egrep ‘oooo?’ test.txt

```

egrep 中()的应用

```

egrep ‘r(oo)|(at)o’ test.txt

```

用()表示一个整体,例如 “(oo)+”就表示一个‘oo’或者多个‘oo’