目录
前言
awk、grep、sed是linux操作文本的三大利器,合称文本三剑客,也是必须掌握的linux命令之一。三者的功能都是处理文本,但侧重点各不相同,其中属awk功能最强大,但也最复杂。grep更适合单纯的查找或匹配文本,sed更适合编辑匹配到的文本,awk更适合格式化文本,对文本进行较复杂格式处理。
一、grep基本介绍
grep 命令是inux 系统中一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。grep全称是 Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。
书写基本格式:
grep [选项]… 查找条件 目标文件
选项:
-m #匹配几次后停止
-v #取反
-i #忽略字符大小写,可有可无
-n #显示匹配的行号
-c #统计匹配行数
-o #仅显示匹配到的字符串
-q #静默模式,不输出任何信息
-A #仅显示当前该行的下几行,包括本行内容,
-B #仅显示当前该行的上几行,包括本行内容;
-e #实现多行之间的逻辑or关系,
-w #匹配整个单词
-E #使用ere,相当于egrep,使用扩展正则
-F #处理两个文件中相同的内容,第一个文件作为匹配条件
-r #递归目录,但不处理软连接
-R #递归目录,处理软连接
grep -m 1 root /etc/passwd
grep -Ev '^[[:space:]]*#|^$' /etc/fstab
grep -c root /etc/passwd #统计匹配到的行数
grep -A3 root /etc/passwd #匹配到的行的后3行也显示出来
grep -e root -e bash /etc/passwd
#包含root或者包含bash 的行
grep -f 123.txt 456.txt
#匹配两个文件中内容相同的部分
grep -r a /opt
#递归过滤目录中的文件
root@test1 opt]# cat 123.txt |grep -v '^$' >test.txt //将非空行写入到test.txt文件
[root@test1 opt]# grep "^b" 123.txt //过滤已b开头
[root@test1 opt]#grep '/$' 123.txt //过滤已/结尾
二、 sort命令
以行为单位对文件内容进行排序,也可以根据不同的数据类型来排序
语法格式:
sort 选项 参数
cat file | sort 选项
常用选项:
-f:忽略大小写,默认会大写字母排在前面
-b:忽略每行前面的空格
-n:按照数字进行排序
-r:反向排序
-u:等同uniq,表示相同的数据仅显示一行,去重
-t:指定字段分隔符,默认使用tab键分隔
-k:指定排序字段
-o <输出文件>:将排序后的结果转存至指定文件
三、 快捷去重——uniq:
uniq命令用于报告或者忽略文件中连续的重复行,常与sort命令结合使用。
格式
uniq [选项] 参数
cat 文件| uniq 选项
-c 统计连续重复的行的次数,并且合并重复的行
-u 显示仅出现一次的行(包括不连续的重复行)
-d 仅显示重复出现的行(必须是连续的重复行)
四、tr
对来自标准输出的内容进行替换,压缩,删除
书写方式
tr 选项 参数
常用选项:
-c:保留字符集1的字符,其他的字符(包括换行符\n)用字符集2替换
-d:删除所有属于字符集1的字符
-s:将重复出现的字符串压缩为一个字符串,用字符集2 替换 字符集1
-t:字符集2 替换 字符集1,不加也行
五、快速裁剪命令—cut
书写格式
cut [选项] 参数
cat file | cut [选项]
常用选项
-d 指定分隔符(默认分隔符为Tab)
-f 按字段进行截取。指定第n个字段;
-b 以字节为单位进行截取
-c 以字符为单位进行截取
–complement 排除所指定的字段–output-delimiter 更改输出内容的分隔符
六、文件拆分—split
split命令用于在Linux下将大文件拆分为若干小文件。
格式:split 选项 参数 原始文件 拆分后文件名前缀
选项
-l 指定行数
-b 指定文件的大小
七、文件合并—paste
按照字段来进行文件的合并
书写格式
paste [选项] 文件1 文件2
选项
-d 用于指定文件的分隔符(默认情况下为制表符"\n")
-s 将列和行的内容进行互相交换
面试题
一、统计当前主机的连接状态
[root@localhost ~]# ss -nta | grep -v '^State' |cut -d " " -f 1| sort | uniq -c
3 ESTAB #表示建立的 TCP 连接处于活动状态
17 LISTEN
二、统计当前连接主机数
[root@localhost opt]# ss -nt | tr -s " "|cut -d " " -f 5 | sort -n | uniq -c
1 Local
2 192.168.233.21:22