主要内容:
grep、egrep的使用,基本/扩展正则、sed的使用(非交互、逐行处理、常用命令与选项)
补充:grep [-E]选项,表示允许使用扩展的正则表达式(同等于egrep)
一、grep 与 egrep 的使用
grep 和 egrep 是 Unix 和 Linux 系统中用于文本搜索的强大工具。它们可以根据指定的模式(正则表达式)在文件中查找匹配的行。虽然 egrep 是 grep 的一个变种,但在现代系统中,grep 已经集成了 egrep 的功能,因此通常推荐使用 grep 并指定选项来实现相同的效果。
1、grep 基本用法
- 格式:grep [选项] 模式 [文件...]
- 常用选项:
-i:忽略大小写。
-v:反向匹配,显示不匹配的行。
-r:递归搜索目录下的所有文件。
-n:显示匹配行的行号。
-E:使用扩展正则表达式(等同于 egrep)。
-o:只显示匹配的部分,而不是整行。
示例:
基本搜索:
grep "pattern" file.txt
忽略大小写:
grep -i "pattern" file.txt
反向匹配:
grep -v "pattern" file.txt
递归搜索:
grep -r "pattern" /path/to/directory
显示行号:
grep -n "pattern" file.txt
使用扩展正则表达式:
grep -E "pattern" file.txt
2、egrep 基本用法
egrep 是 grep -E 的别名,用于支持扩展正则表达式。在现代系统中,grep 已经集成了 egrep 的功能,因此通常推荐使用 grep -E。
文本处理顺序:以行为单位,逐行进行处理,默认只输出与表达式相匹配的文本行
- 格式1:egrep [选项] ‘正则表达式’ 文件...
- 格式2:前置命令 | egrep [选项] ‘正则表达式’
- 常用选项:
[-i] 忽略字母大小写
[-v] 条件取反
[-c] 统计匹配的行数 //与wc -l 效果相同
[-q] 静默、无任何输出,一般用于检测(通过$?返回值,0为有匹配。非0为无匹配)
[-n] 显示出匹配结果所在的行号
[--color] 标号显示匹配字串
示例:
基本搜索:
egrep "pattern" file.txt
忽略大小写:
egrep -i "pattern" file.txt
反向匹配:
egrep -v "pattern" file.txt
递归搜索:
egrep -r "pattern" /path/to/directory
显示行号:
egrep -n "pattern" file.txt
案例:典型的应用场合
扩展正则表达式支持更多的元字符和功能,例如 +、?、| 等。
-
匹配一个或多个字符:
grep -E "a+" file.txt
-
匹配零个或一个字符:
grep -E "a?" file.txt
-
匹配多个模式之一:
grep -E "pattern1|pattern2" file.txt
grep 命令不带-E选项时,支持基本正则匹配模式。比如“word”关键词检索、“^word”匹配以word开头的行、“word$”匹配以word结尾的行等。
例如:输出以“r”开头的用户记录
[root@svr5 ~]# grep '^r' /etc/passwd
root:x:0:0:root:/root:/bin/bash
rpc:x:32:32:Portmapper RPC user:/:/sbin/nologin
例如:输出以“localhost”结尾的行
[root@svr5 ~]# grep 'localhost$' /etc/hosts
127.0.0.1 localhost.localdomain localhost
若使用grep -E或egrep命令,可支持扩展正则匹配模式,能够自动识别 |、{} 等扩展正则表达式中的特殊字符;
[root@svr5 ~]# grep -E '^(root|daemon)' /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
同等于
[root@svr5 ~]# egrep '^(root|daemon)' /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
二、正则表达式概述
正则表达式(Regular Expression,简称 regex 或 regexp)是一种用于匹配字符串中字符模式的强大工具。它广泛应用于文本搜索、替换、验证和提取等操作。正则表达式由普通字符(如字母、数字)和元字符(具有特殊意义的字符)组成,通过这些字符的组合可以描述复杂的字符串模式。
1.基本正则表达式(Basic Regular Expressions,BRE)
基本正则表达式使用较少的元字符,通常需要反斜杠 \ 进行转义。(可直接使用grep)
正则符号 |
含义 |
示例 |
说明 |
^ |
匹配行首 |
^abc |
以abc开头的行 |
^# |
以#号开头的行(比如注释行) |
||
$ |
匹配行尾 |
abc$ |
以abc结尾的行 |
^$ |
空行 |
||
[] |
集合,匹配除换行符外的任意单个字符 |
[abc] |
例如 a、b 或 c |
[^] |
匹配不在方括号内的任意一个字符 | [^abc] |
|
. |
匹配除换行符外的任意单个字符 | a.c | 匹配 abc、a1c、aAc 等 |
* |
匹配前一个字符任意次数 注意:*不允许单独使用 |
a* |
匹配 a、aa、aaa 等。 |
(abc)* |
0个或多个连续的abc |
||
.* |
任意长度的任意字符串,包括空行 |
||
\{n\} |
匹配前面的字符恰好 n 次 | (ab)\{3\} |
匹配ababab |
\{n,m\} |
匹配前面的字符至少 n 次,但不超过 m 次 | (ab)\{1,3\} |
匹配ab、abab、ababab |
\{n,\} |
匹配前面的字符至少 n 次 | (ab)\{2,\} |
匹配2个及以上连续的ab |
\(\) |
保留、组合为整体 |
ab{1,3} |
匹配ab、abb、abbb |
\(ab\){1,3} |
匹配ab、abab、ababab |
2.扩展正则表达式(Extended Regular Expressions,ERE)
(需要使用egrep或grep -E)
正则符号 |
含义 |
示例 |
说明 |
+ |
最少匹配一次 |
a+ |
一个或多个连续的a |
(abc)+ |
一个或多个连续的abc |
||
? |
最多匹配一次 |
a? |
0个或1个a |
(abc)? |
0个或1个abc |
||
{n,m} |
匹配前一个字符n到m次 |
(ab){1,3} |
匹配ab、abab、ababab |
() |
组合为整体 |
ab{1,3} |
匹配ab、abb、abbb |
(ab){1,3} |
匹配ab、abab、ababab |
||
| |
或者 |
root|bin |
匹配root、bin |
\b |
单词边界 |
\broot\b |
匹配单词root、不匹配keroot、rooty、brooty等字符串 |
3.匹配指定字符集合内的任何一个字符,[ ]内加【^】可取反
示例 |
说明 |
[abcd_?] |
匹配a、b、c、d、_、? |
[a-z] |
匹配任意小写字母 |
[A-Z] |
匹配任意大写字母 |
[0-9] |
匹配任意数字 |
[a-Z] |
匹配任意字母 |
[a-Z0-9] |
匹配任意字母或数字 |
[^A-Z] |