文本处理工具
sort 命令
sort命令:按行对文件的内容进行排序,也可以根据不同的数据类型进行排序
命令 | 含义 |
---|---|
-f | 忽略大小写 |
-b | 忽略每行前面的空格 |
-n | 按照数字进行排序 |
-u | 表示去重,相同的数据和仅显示一行 |
-o 输出的文件名 | 把sort排序后的结果输出到指定的文件 |
uniq命令
uniq去重:用于同级或者忽略文件中连续出现的重复行,一般和sort结合使用
语法:uniq 选项 文件名
选项 | 含义 |
---|---|
-c | 统计连续重复的行的次数,并且合并重复的行 |
-u | 显示仅出现一次的行(包括不连续出现的重复行) |
-d | 仅显示重复出现的行(必须是连续的重复行) |
tr命令
tr:用来对标准输入的字符串进行替换,压缩和删除
语法:tr 选项 参数
选项 | 含义 |
---|---|
-c | 保留字符集1的字符,用其他字符来替换字符集2 |
-d | 删除属于字符集1的字符 |
-s | 将重复出现的字符串压缩成一个,用字符集2替换字符集1 |
-t | 替换字符集,默认的,可以不加 |
cut命令
cut:截取,对字段进行截取和裁剪
语法:cut 选项 参数
选项 | 含义 |
---|---|
-d | 指定分隔符(默认分隔符是tab) |
-f | 指定要截取的字段 |
-b | 以字符的单位进行截取 |
-c | 以字符的单位进行截取 |
–complement | 排除指定的字段 |
-output-delimiter | 更改输入内容的分隔符 |
面试题:文件合并的方法是什么,区别是什么?
cat 1 2 > 3 上下合并
paste 1 2 > 3 左右合并
split 命令
split:文件拆分
选项 | 含义 |
---|---|
-l | 按行分割 |
-b | 按文件大小分割 |
正则表达式
基本正则表达式
基本正则表达式 grep
使用正则表达式,匹配内容最好使用引号引起来,避免出现歧义
元字符:
元字符 | 含义 |
---|---|
. | 任意单个字符 |
\ | 转义符 |
[0-9] | 匹配文件内容的任意单个数字 |
[a-z] | 匹配文件内容的任意单个小写字母 |
[A-Z] | 匹配文件内容的任意单个大写字母 |
[[:blank:]] | 空白字符,空格 |
() | 分组 |
[^] | 取反 |
表示次数
表示次数 | 含义 |
---|---|
* | 任意字符,表示匹配前面的任意字符,0次,尽可能多的匹配 |
.* | 匹配任意长度的字符,最少要有一个,也就是匹配所有 |
? | 匹配前面的字符0次或者1次,可有可无 |
\ + | 匹配前面的字符,最少出现1次,有且>=1 |
\ {n \} | 匹配前面的字符等于多少次 |
\ {m,n\} | 匹配前面的字符最少m次,最多n次 |
\ {,n \} | 匹配前面的字符最多n次,只要比n小,都算 |
\ {n, \} | 匹配前面的字符最少n次,只要比n大,都算 |
位置锚定
符号 | 含义 |
---|---|
^ | 以什么开头 |
$ | 以什么结尾 |
^$ | 空格 |
^root$:以root开头和结尾的,那一行只能有这一个单词
词首锚定和词尾锚定:\b
分组:()
逻辑或符号:|
扩展正则
扩展正则表达式 grep -E=egrep
扩展正则的元字符和基本正则一样
表示次数
表示次数 | 含义 |
---|---|
* | 任意字符,表示匹配前面的任意字符,0次,尽可能多的匹配 |
.* | 匹配任意长度的字符,最少要有一个,也就是匹配所有 |
? | 匹配前面的字符0次或者1次,可有可无 |
+ | 匹配前面的字符,最少出现1次,有且>=1 |
{n } | 匹配前面的字符等于多少次 |
{m,n} | 匹配前面的字符最少m次,最多n次 |
{,n } | 匹配前面的字符最多n次,只要比n小,都算 |
{n, } | 匹配前面的字符最少n次,只要比n大,都算 |
练习
统计当前主机的连接状态
ss -antp | grep -v '^State' | cut -d ' ' -f 1 | sort | uniq -c
统计nginx的访问日志当中多次出现的IP地址:
cat /var/log/nginx/access.log | cut -d "" -f 1 | sort | uniq -c
显示/etc/passwd中以sh结尾的行
grep "sh$" /etc/passwd
查找/etc/inittab中含有“以s开头,并以d结尾的单词”模式的行
grep -E "\bs[a-z]+d\b" /etc/inittab
查找ifconfig命令结果中的1-255之间的整数
ifconfig ens33 | grep -Eo "\b([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\b"
在/etc/passwd中取出默认shell为bash的行
grep -E "[bash]{4}$" /etc/passwd
高亮显示passwd文件中冒号,及其两侧的字符
grep -E "[a-zA-Z0-9,/]:+[a-zA-Z0-9,/]|:[0-9a-zA-Z/]" /etc/passwd