目录
如何针对文件内容进行匹配或者过滤
grep
针对文本内容进行过滤,也就是查找
常用选项
-i 忽略大小写 默认的
-n 显示匹配的行号
-c 显示匹配的行数
-v 取反,要找的不显示
-m 多个匹配时,可以限定显示的行数,可理解为匹配几次之后停止
-o 仅显示匹配到的字符串
-A 匹配所在行以及下几行
-B 匹配所在行以及上几行
-C 匹配所在行以及上下几行
-e 逻辑或,可以匹配多个条件,实现多个选项间的逻辑关系
-w 匹配整个单词
-E 使用扩展正则表达式 egrep也可以使用扩展正则表达式
-f 根据两个文件的内容进行匹配,匹配两个文件中相同的内容
-r 递归目录,不处理软连接
-R 递归目录,处理软连接
grep的作用就是过滤文本内容,是针对行来进行处理
sort
以行为单位对文件的内容进行排序,也可以根据不同的数据类型进行排序
sort 选项 参数
cat 文件名 | sort 选项
常用选项
-f 忽略大小写,默认会把大写字母排在前面
-b 忽略每行前面的空格
-n 按照数字进行排序
-r 反向排序
-u 相同的数据只显示一行,去重
-o 输出文件名 将排序后的结果转存到指定文件
字母和数字不要混在一块排序
uniq
去重命令,用于报告或者忽略文件中连续出现的重复行,经常与sort结合使用
uniq 选项 参数
cat 文件名 | uniq 选项
常用选项
-c 统计连续重复的行的次数,并合并打印重复的行,不会改变文件内容
-u 显示仅出现一次的行,包括不连续的重复行
-d 仅显示重复出现的行,必须是连续的重复行
tr
对来自标准输入的字符进行替换、压缩和删除
tr 选项 参数
也可以结合管道符使用
常用选项
-c 保留字符集1的字符,用字符集2来替换其他的字符集
-d 删除指定的字符集
-s 把重复出现的字符串压缩成—个字符串,也可以替换
-t 默认就是替换,可以不加
主要用来替换和删除
用的做多的是删,把不要的部分删除
cut
截取,与awk有相似之处
对字段进行截取和裁剪
cut 选项 参数
cat 文件名 | cut 选项
常用选项
-d 指定分隔符 默认分隔符是tab,不是空格,要用引号引起来 awk的默认分隔符为空格
-f 按字段进行截取,指定要截取第几个字段,1-3 表示1到3,1,3表示1和3
-b 以字节为单位截取
-c 以字符为单位截取
--complement 删除指定字段
--output-delimiter 更改输出内容的分隔符
split
文件拆分,大文件拆分成若干小文件
-l 指定行数拆分
-b 指定文件大小拆分
拆分后面要加自定义名称,方便识别 面试题
paste
文件合并
paste a b 和cat a b之间的区别 面试题
paste是左右合并
cat是上下合并
不加重定向输出就是临时展示
统计当前主机的连接状态
listen 监听、等待连接
estab 已经建立连接,连接处于活动状态
ss -antp | grep -v "^State" | sort | cut -d " " -f 1 | uniq -c
统计当前主机连接数
ss -nt | grep -v "^State" | tr -s " "| cut -d " " -f 4 | sort | uniq -c
文本处理三剑客
grep
sed
awk
正则表达式
正则表达式:由一类特殊字符及文本字符所编写的一种模式,处理文本当中的内容。其中的一些字符不表示字符的字面含义,表示控制或者通配的功能
通配符:用于匹配文件名和目录名,不能匹配文件的内容
正则表达式:可以匹配命令结果、文本内容
通配符
* 匹配任意一个或者多个字符
?匹配任意一个字符
[] 匹配范围内的任意单个字符 如[0-9][a-z][A-Z]
正则表达式
1、基本正则表达式
2、扩展正则表达式
区别仅限于写法上,其他的没有任何不同
基本正则
字符匹配,元字符
. 表示匹配任意的单个字符,可以是一个汉字
\ 表示转义符 \. 就是一个点
() 表示分组的意思 \(\)
[] 匹配指定范围内的任意单个字符 如[0-9][a-z][A-Z]
[^]取反,指定范围之外的
[[:space:]] 包含空格、tab键、换行空格、回车空格
[[:blank:]] 空白字符,只包含空格和tab键(制表符)
通配符不能完全匹配大小写,真正区分大小写要用正则表达式
表示次数的表达式
* 表示匹配前面的字符任意次,有多少匹配多少,没有也行。贪婪模式
.* 匹配任意长度的字符,至少要有一次,不能没有
\? 匹配前面的字符0次或者1次
\+ 匹配前面的字符至少1次
\{n\} 匹配前面的字符等于n次
\{m,n\} 匹配前面的字符最少m次,最多n次
\{,n\} 匹配前面的字符最多n次
\{m,\} 匹配前面的字符最少m次
位置锚定
^ 以什么为开头,在模式的左侧
$ 以什么为结尾,在模式的右侧
^root$ 匹配整行,且只有一个root
^$ 匹配空行
词首锚定
<或者\b
词尾锚定
>或者\b
\<root\> 匹配整个单词
分组
\(root\)
\| 表示逻辑或
扩展正则
与基本正则差不多,但无\
要用grep -E
实验
高亮显示passwd文件中冒号,及其两侧的字符
cat /etc/passwd | grep -E ".?:*:.?"
在/etc/passwd中取出默认shell为bash的行
cat /etc/passwd | grep "bash$"