本节课我们主要学习的是针对文件内容的操作
针对文件的内容进行匹配或者过滤
排序
grep 过滤 针对文本的内容进行过滤,也就是查找
grep -i 忽略大小写,默认的,可以不加
-n 显示匹配的行号 (既显示内容,也显示内容所在的行数)
-c 只统计匹配的行数
-v:取反,你要找的我不显示
grep的主要作用就是过滤文本内容,是针对行来进行处理。
-m 1 多个匹配的话,可以限定显示匹配的行数(只显示几行),匹配几次之后停止。
-o 仅显示匹配到的字符串
-q 静默模式,什么都不输出(匹配到了结果,但是不显示)一般不用,了解即可
-A 2 " " after 表示匹配到内容行后,再向下展示几行。包含匹配到的的行,就是匹配当前行和当前行上面两行
-B 2 " " before 匹配到当前行以及当前行的前几行
-C 2 " " 匹配到自己所在的行,以及上下各几行。
-e:逻辑或,可以匹配多个条件,实现多个选项间的逻辑关系,可以跟多个条件。
- w 匹配整个单词
- E 扩展正则表达式 egrep 都是可以使用扩展正则表达式
-f 根据两个文件的内容进行匹配,匹配两个文件中相同的内容
-r 递归目录,不处理软连接
-R 递归目录,处理软连接(递归目录下所有的文件的内容)
题1:显示所有不以#开头的行(^表示以什么为开头,$表示以什么为结尾,要用引号引起来)
sort:以行为单位,对文件的内容进行排序。也可以根据不同的数据类型进行排序
排序
格式:
sort 选项 参数
cat 文件名 | sort 选项
常用的选项:
-f 忽略大小写,默认会把大写的字母排在前面
-b 忽略每行前面的空格
-n 按照数字进行排序
-r 反向排序(很少用,了解即可)
-u 相同的数据,只显示一行,去重
-o 输出的文件名:将排序后的结果转存到指定的文件
注意:数字和字母不要混合在一起排序
示例:
顺序混乱,那么能不能按照原文本的顺序,输入到ky30里面去呢?
以上都是根据文本内容排序,不是文件名
去重的命令:
uniq 用于报告或者忽略文件中连续出现的重复行,经常与sort命令结合使用
tr命令
tr 用于对来自标准输入的字符进行替换 压缩和删除
命令格式:
tr 选项 参数
| 也可以结合管道符使用
常用的选项:
-c 保留字符集1的字符,用字符集2来替换
没加 就是替换
A-Z用引号引起来都是表示正则
就是匹配前面输出的内容,把所有的大写字母都换成小写字母,标准写法
例:把ab保留,替换c成t。
echo abc | tr -c "ab" ''t"
echo abc | tr -d "ab"
删除ab,保留c
-d 删除指定的字符集
-s 把重复出现的字符串压缩成一个字符串,也可以替换
例:
变:把连续多个空格压缩成一个空格用\n:换行空格
例:echo $PATH以:作为分隔,把它替换成换行(/n)
-t 默认就是替换,可以不写
tr 就是把不想要的部分,删除掉
tr -t = tr
主要作用就是替换和删除
cut:截取,和awk有相似之处
对字段进行截取和裁剪
格式:
cut 选项 参数
cat 文件名 | cut 选项
-d 指定分隔符,默认分隔符是tab,不是空格
awk的默认分割符是空格,多个空格也会算一个
-f 按字段进行截取,指定要截取第几个字段 1-3,1到3 1,3 1和3
-b 以字节为单位截取
-c 以字符为单位截取(用的比较少,了解即可)
-complement:删除指定的字段
-output-delimiter:更改输出内容的分隔符(一般不用)
例:cut -d ":" -f 1-3 /etc/passwd 指定分隔符并截取1-3行(用得上,一定要会)
1,3:截取第1行和第3行
删除指定字段:
更换指定的分隔符():
split 文件拆分(面试题,面试会问)
把大文件拆分成若干小文件
-l 指定行数拆分 line
-b 指定文件大小拆分 block
split -l 20 passwd ky30(指定20行拆一个,指定拆分之后的文件名为ky30)
注:一般来说我们都会在拆分后自定义一个名称,方便识别。
指定大小:(把一个6.3M的文件拆分一下,同样自定义一个划分后的名称)
2M一个,剩下的只能单独的再切一个
paste 文件合并(也是一个面试题,必会)
paste a b 和 cat a b 之间的区别
不加重定向输出,就是临时展示。
paste是左右合并
cat是上下合并
这只是展示,不生效
永久生效:要用重定向输出符,把它重定向到文件里面
两个面试题(笔试题)
1、
统计当前主机的连接状态
listen 监听,等待连接/谁可以连接
estab 已经建立连接,连接处在活动状态
netstat -antp
ss -antp 都可以统计连接状态
只取出监听状态那一行:
netstat
ss -antp:
ss -antp | grep -v "^State" | cut -d " " -f 1 | sort | uniq -c
过滤掉所有不是State开头的列 | 然后取第一列 | 统计 | 统计重复的次数
排序 连续重复的排一块 统计
2、统计当前主机的连接数
ss -ap 统计当前连接的主机
ss -at | tr -s " " | cut -d " " -f 4 | sort -n | uniq -c
先把多个空格压缩成一个 然后再cut把local那一列切出来 然后排序 统计
重点总结:
本章全都是针对文本内容进行的操作
1、grep 过滤
2、sort 排序
按照原文本的顺序输入到ky30.txt里面
cat -n /etc/passwd | sort -n -o ky30.txt
3、uniq 去重
4、tr 对字符串或者字符集进行替换,压缩和删除
把连续多个空格压缩成一个空格用\n:换行空格
sort -n test.sh | tr -s "\n"
改echo $PATH以:作为分隔,把它替换成换行(\n)
ECHO $PATH | tr -s ":" "\n"
5、cut 截取
cut -d " :" -f 1-3 1,3 /etc/passwd
-d:指定分隔符
-f 指定切几列
1-3 1到3列 1,3 1和3列
6、split 文件拆分(面试题)
-l 指定行数来拆 line
-b 指定文件大小列来拆 block
不要忘了接上自定义的文件名
split -l 20 passwd wx
7、paste 文件合并
paste a b 和 cat a b 的区别(面试题)
paste是左右合并
cut是上下合并
8、统计当前主机的连接状态(面试题1)
状态:listen 监听,等待连接,谁可以连接
estab 已经建立连接,连接处在活动状态
netstat -antp | awk 'NR>2 {print $6}' | sort | uniq -c
ss -antp | grep -v "^State" | cut -d " " -f 1 | sort | uniq -c
9、统计当前主机的连接数(面试题2)
ss -nt | tr -s " " | cut -d " " -f 4 | sort | uniq -c
红字为必须要会的内容
netstat -nt
grep过滤选项:
-i 忽略大小写,默认的,可以不加
-n 显示匹配的行号 (既显示内容,也显示内容所在的行数)
-c 只统计匹配的行数
-v:取反,你要找的我不显示
grep的主要作用就是过滤文本内容,是针对行来进行处理。
-m 1 多个匹配的话,可以限定显示匹配的行数(只显示几行),匹配几次之后停止。
-o 仅显示匹配到的字符串
-q 静默模式,什么都不输出(匹配到了结果,但是不显示)一般不用,了解即可
-A 2 " " after 表示匹配到内容行后,再向下展示几行。包含匹配到的的行,就是匹配当前行和当前行上面两行
-B 2 " " before 匹配到当前行以及当前行的前几行
-C 2 " " 匹配到自己所在的行,以及上下各几行。
-e:逻辑或,可以匹配多个条件,实现多个选项间的逻辑关系,可以跟多个条件。
- w 匹配整个单词
- E 扩展正则表达式 egrep 都是可以使用扩展正则表达式
-f 根据两个文件的内容进行匹配,匹配两个文件中相同的内容
-r 递归目录,不处理软连接
-R 递归目录,处理软连接(递归目录下所有的文件的内容)
显示所有不以#开头的行(^表示以什么为开头,$表示以什么为结尾,要用引号引起来)
sort:以行为单位,对文件的内容进行排序。也可以根据不同的数据类型进行排序
排序
格式:
sort 选项 参数
cat 文件名 | sort 选项
常用的选项:
-f 忽略大小写,默认会把大写的字母排在前面
-b 忽略每行前面的空格
-n 按照数字进行排序
-r 反向排序(很少用,了解即可)
-u 相同的数据,只显示一行,去重
-o 输出的文件名:将排序后的结果转存到指定的文件
注意:数字和字母不要混合在一起排序
顺序混乱,那么能不能按照原文本的顺序,输入到ky30里面去呢?
cat -n /etc/passwd | sort -n -o ky30.txt
命令格式:
uniq 选项 参数
cat 文件名 | uniq 选项
-c 统计连续重复的行的次数,并且合并重复的行,并打印,不会改变文件的内容
-u 显示仅出现一次的行,包括不连续的重复行
-d 仅显示重复出现的行,必须是连续的重复行
排序之后,会把不连续重复的行默认排在一块,再用uniq -c去重统计,统计重复出现了几次
tr命令
tr 用于对来自标准输入的字符进行替换 压缩和删除
命令格式:
tr 选项 参数
| 也可以结合管道符使用
常用的选项:
-c 保留字符集1的字符,用字符集2来替换
没加 就是替换
A-Z用引号引起来都是表示正则
就是匹配前面输出的内容,把所有的大写字母都换成小写字母,标准写法
例:把ab保留,替换c成t。
echo abc | tr -c "ab" ''t"
echo abc | tr -d "ab" 删除ab,保留c
-d 删除指定的字符集
-s 把重复出现的字符串压缩成一个字符串,也可以替换
变:把连续多个空格压缩成一个空格用\n:换行空格
sort -n test.sh | tr -s "\n"
例:echo $PATH以:作为分隔,把它替换成换行(\n)
ECHO $PATH | tr -s ":" "\n"
-t 默认就是替换,可以不写
tr 就是把不想要的部分,删除掉
tr -t = tr
主要作用就是替换和删除
cut:截取,和awk有相似之处
对字段进行截取和裁剪
格式:
cut 选项 参数
cat 文件名 | cut 选项
-d 指定分隔符,默认分隔符是tab,不是空格
awk的默认分割符是空格,多个空格也会算一个
-f 按字段进行截取,指定要截取第几个字段 1-3,1到3 1,3 1和3
-b 以字节为单位截取
-c 以字符为单位截取(用的比较少,了解即可)
-complement:删除指定的字段
-output-delimiter:更改输出内容的分隔符(一般不用)
cut -d ":" -f 1-3 /etc/sswd 指定分隔符并截取1-3行(用得上,一定要会)