1,构成:
一堆特殊符号和字母构成---元字符
2,作用:
通过对文本的内容进行过滤,在对文件中的内容进行过滤
3,正则的种类
- 基础正则表达式
- 扩展正则表达式
4,结合三个命令来使用:
- grep
- sed
- awk
5,grep命令
作用:对文件的内容进行过滤
格式:grep 【选项】匹配的内容 文件
选项:
- -v:取反
- -o:仅仅显示所匹配的内容
- -E:使用扩展
- -i:忽略大小写
例:从a.txt文件中过滤出包含root的行
grep "root" a.txt
例:从a.txt文件中过滤出不包含root的行
grep -v "root" a.txt
例:从
a.txt
文件中过滤出仅仅显示
root
的行
grep -o "root" a.txt
例:统计
a.txt
文件中有多少个
root
grep -o "root" a.txt |wc -w
通配符和正则的区别:
- 通配符是对文件名进行匹配,正则表达式是对文件中的内容进行匹配
正则中元字符:
1)
匹配单个字符
.
表示任意一个字符(可以空格 逗号 字母 数字
...
)
例:匹配
a
前面有一个字符的行
grep ".a" 11.txt
2)[ ] 表示范围内的其中一个
- [123] 表示匹配1或2或3
- [0-9] 表示匹配所有的数字
- [A-Z] 表示匹配所有大写的字母
- [a-z] 表示匹配所有小写的字母
- [a-Z] 表示匹配所有字母
例:匹配文件中包含数字的行
grep [0-9] file
例:包含字母
a
的行
grep "a" file
3)用字符集的方式表达
- [[:space:]] :表示一个空格
- [[:digit:]] :表示任意一个数字
- [[:lower:]] :表示任意一个小写字母
- [[:upper:]] :表示任意一个大写字母
- [[:alpha:]] :表示任意一个字母
- [[:alnum:]] :表示任意一个字母+数字
- [[:punct:]] :表示任意一个标点符号
例:匹配一个包含小写字母的行
grep [a-z] file
grep [[:lower:]] file
4) ^[ ]
例:匹配以
#
开头的行
grep ^[#] file
[^a]
匹配除了
a
以外的任意字符
grep [^a] file
例:过滤没有包含
qaz
的行
grep [^qaz] file
例:过滤出
#
开头后面有一个空格的行
grep "^#[[:space:]]" 11.txt
5)
显示匹配到的行的前的若干行
- -An:显示匹配到的内容的后n行
- -Bn:显示匹配到的内容的前n行
- -Cn:显示匹配到的内容的前后各n行
例:匹配包含
root
的行的前
3
行
grep -B3 "root" file
6)
次数匹配
- “*” 前面字符出现了任意次数(0.1.....n)
例:a*
- ".*" 表示任意长度的任意字符
例:
a.*b
grep "a.*b" 11.txt
- ”?“表示其前面字符出现最多一次
-
a\{m,n\}b b前面的a至少出现m次,最多n次 -E a{m,n}b grep -E "a{1,}b" 11.txt b前面的a至少1次最多不限 grep -E "a{1,1}b" 11.txt 1次 grep -E "a?b" 11.txt 1次
7
)位置锚定
- ^ 表示以n为开头的行
- $ 表示以n为结尾的行
例:以
yum
为结尾的行
grep "yum$" file
- \<n 表示单词首部
- n\> 表示单词尾部
- ^$ 表示空白行
8
)分组
- \( \) 将一个内容当作一个整体看待
例:在
11.txt
中,过滤出出现过俩个相同数字的行
grep "\([[:digit:]]\).*\1" 11.txt
扩展正则表达式:
基础正则:
grep [
选项
]
匹配内容
文件
扩展:
grep -E
匹配内容
文件
egrep
匹配内容
文件
{1
,
}
等同
+
:其前面的字符至少出现过
1
次
6,sed命令
格式:
sed [ 选项 ] 操作 目标文件
选项:
- -i:修改原始文件【如果不加-i,那就是仅仅修改内存中的文件副本】
例:将
1.txt
中的
tom
修改成
jerry
sed -i "s/tom/jerry/g" new.txt
例:将1.txt中/修改成@
sed -i "s#/#@#g" 1.txt
7,awk命令
作用:截取文件中每行的指定的字段
格式:
awk -F " 分隔符 " '{print $ 数字 }' 文件名
awk -F ":" '{print $3}' /etc/passwd
0 输出整条记录NF 输出最后一个字段
$1:
第一段
$2
:第二段
$3
:第三段
选项:
- -F "分隔符":用什么字段将这行内容分开成一段一段
例:
仅仅显示
zhangsan
的
uid
awk -F ":" '{print $3}' /etc/passwd