正则表达式是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符")。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。它在文本处理中非常有用,尤其是在搜索、编辑或操作文本和数据时。
grep通过正则表达式来定义搜索模式,从而实现对文本的精确搜索。
awk在处理文本时,可以使用正则表达式来定义模式,进而对符合这些模式的字段或记录进行特定的操作。
sed在处理文本时,同样使用正则表达式来定义查找模式,然后基于这些模式进行替换、删除等操作。
grep主要用于搜索文本
sed主要用于文本的过滤和转换
awk提供更高级的文本分析和处理能力。
正则表达式
正则表达式–元字符
符号 | 含义 |
---|---|
^ | 匹配开头,如 ^123 以123开头的行,有则匹配出来 |
$ | 匹配结尾,如123$ 以123结尾的行,有则匹配出来 |
^$ | 匹配空行,也就是那一行啥都没有(空格也不行)则匹配出来 |
. | 任意一个字符(空行除外) |
* | 前一个字符连续出现0次或者多次 |
.* | 任意字符出现0次(多次),也就是代表所有 |
[] | 匹配指定范围内的一个字符,一次匹配一个字符,可多样。[abcd],匹配a或者b或者c或者d, |
[^] | 取反,匹配不在指定组内的字符,如[^abc],排查abc |
\ | 反斜杠,适用于转义匹配,\放在需要转意字符的左侧,如匹配以 “.” 结尾 grep ‘\.$’ filename |
\< | 词首定位符,如 grep “<love” 1.txt 查找1.txt文件中以love开头的单词 |
\> | 词尾定位符 grep “love>” 1.txt 查找1.txt文件中以love结尾的单词 |
o\{m\} | 表示字符o重复出现m次 |
o\{m,\} | 表示字符o重复出现m次以上 |
o\{m,n\} | 表示字符o重复出现m到n次 |
扩展正则表达式元字符
grep 不识别扩展元字符
egrep
egrep 是grep的升级
或者
grep -E
-
+ o+ 表示 o 出现至少一次,1次到多次
-
? lo?ve :?前面的o 出现0次或者1次。有还是没有,都行!
-
a|b 包含a或者b的
egrep "rs|able" 1.txt
rs
loveable
lovers
rsble
rable
-
()
egrep "r(s|a)ble" 1.txt
rsble
rable
示例:
代码 | 示意 |
---|---|
grep love 1.txt | 找love |
/^love/ | 以love开头 |
/love$/ | 以love结尾 |
/l.ve/ | l开始,一个任意字符,ve结尾 |
/lo*ve/ | l开始,零个或多个o,ve结尾 |
/[Ll]ove/ | 大L 或者小L 开头的 ove |
/love[a-z]/ | love最后一个小写字母 |
/love[^a-zA-Z0-9 ] / | love最后一个(不是字母或者数字),而是符号 |
示例2
代码 | 示意 |
---|---|
/.*/ | 所有行 [root@localhost ~]# egrep “.*” 1.txt |
/^$/ | 空行 |
/^ [A-Z]…$/ | 开头一个大写,最后2个任意字符 |
/^ [A-Z][a-z ]*3[0-5]/ | 一个大写开头,0到多个小写或空格,3,最后是0-5的一个数字 |
/[a-z]*\./ | 0到多个小写字母,最后一个点 |
/^ *[A-Z][a-z][a-z]$/ | 0到多个空格开头,一个大写,一个小写,再一个小写结尾 |
/^ [A-Za-z]*[ ^,][A-Za-z]*$/ | 0到多个字母开头,非逗号,0到多个字母结尾 |
/\<fourth\>/ | 找个单词,寻找叫fourth的单词 |
/\<f.*th\>/ | 找单词。以f开头,中间任意字符,th结尾 |
/5{2}2{3}\./ | 5两次个2三个和一个点。55222. |
/^ [ \t]*$/ | 0到多个 ,空格或tab的行 |
/^#/ | 井号开头的行 |
/^ [ \t]*#/ | 有0到多个,空格或者tab开头的行,即注释行 |
:1,$ s/([Oo]ccur\)ence/\1rence/ | 多个r。就是把occurence 换成occurrence。1,$表示从第一行到最后一行 |
:1,$ s/\(square\) and \(fair\)/\2 and \1/ | 换个位置。square and fair 换成了 fair and square |