浏览文件
示例:1、查看前10行
2、跟踪查看最后100行
wc
命令 用于统计文件的行数、单词数、字符数等。
不带参数时默认输出一行,字段格式为:
常用参数:
grep
grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。常用来在结果中搜索特定的内容。
一般格式:
选项
示例1) 将/etc/passwd,有出现 root 的行取出来:
2)将/etc/passwd,有出现 root 的行取出来,同时显示这些行在/etc/passwd的行号:
3)将/etc/passwd,将没有出现 root 的行取出来
4)将/etc/passwd,将没有出现 root 和nologin的行取出来
5) 查找nginx是否运行:
根据文件内容递归查找目录
6)在当前目录里文件查找字符串'math'
7)在当前目录及其子目录下搜索'math'行的文件
8)当前目录及其子目录下搜索'math'行的文件,但是不显示匹配的行,只显示匹配的文件
显示行号:
正则表达式
支持正则语法,单引号里面写正则。
正则示例:
示例:
更多的正则知识请查看正则表达式相关知识。
扩展grep(grep -E 或者 egrep)
使用扩展grep的主要好处是增加了额外的正则表达式元字符集。
示例:
查找包含1990和1989的行:
awk
awk简介
awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件(或其他方式的输入流, 如重定向输入)逐行的读入(看作一个记录集), 把每一行看作一条记录,以空格(或\t,或用户自己指定的分隔符)为默认分隔符将每行切片(类似字段),切开的部分再进行各种分析处理。
awk有3个不同版本: awk、nawk和gawk,未作特别说明,一般指gawk,gawk 是 AWK 的 GNU 版本。
Awk基本语法:
pattern表示用来过滤记录的模式,可是是正则表达式,关系运算表达式,也可以什么也没有(表示选中所有记录)。
每个pattern选中的行记录会被花括号括起来的命令command操作一遍, command之间用 分割。 花括号里面可以什么也没有, 则默认为print输出整行记录。 Comamnd可以是输出, 可以是算术运算,逻辑运算,循环控制等等。
示例
s.txt
一行中的5个字段分别表示 , 是一个很传统很典型的报表文件。
现在演示awk是如何查找的:
1)直接输出1990年出生的同学:
或者:
awk默认把输入的内容以空格拆分出每列。 表示匹配所有列, 将输出所有列,每列分隔符是空格。
2)对chinese的课程的行输出"语文":
3)记录的头部和结尾加上一段说明:
AWK工作流程:逐行扫描文件,从第一行到最后一行,寻找匹配特定模式的行,并在这些行上进行用户想要到的操作。
BEGIN只会在最开始执行;END只会在扫描所有行数之后执行。BEGIN和END之间的花括号的内容每扫描一行都会执行。
4)查找女生的成绩且只输出姓名、学科、成绩:
表示第1列, 类推。这里条件是表达式,而不是正则。print里 表示空格分隔符。
5)找出1990年出生的学生姓名,并要求匹配正则:
这里 表示匹配正则表达式。 表示不匹配正则表达式。
如果需要多选,则改成:
6) 找出大于1985年出生的学生姓名,年龄,使用表达式:
awk内置变量
awk有许多内置变量用来设置环境信息,这些变量可以被改变,下面给出了最常用的一些变量。
示例:6)第四个字段科目为chinese的记录编号, 学生姓名, 科目:
7)统计数学成绩大于90的个数:
8)更换输入换行符
等价于:
输出:
注:文本内容(例如"11 22\n12 23")里的 不是换行符,实际是 。shell里字符串的 要生效,需要使用 。示例: 。
9)更换列输入、输出分隔符:
指定输入域分隔符为 。 等价于 。 指定输出域分隔符为 。
注: 和 在处理MySQL数据导出导入时有非常大的作用:我们可以使用 指定每列是以 或者 (csv格式)分隔的;输出的时候我们可以用 指定每列分隔符,默认的空格经常不足以方便使用。如果使用了 ,使用 是改变不了输出分隔符的,需要手动指定列,例如 。
10)批量操作
11)文件切割
每5W行切割为一个文件。
12)分组合并
例如test.txt文本内容是:
需要整理成(姓名、日期相同的计数累加):
脚本:
awk函数
awk还支持内置函数。这里只列举部分。
13) int函数
如果只是想转换为数字,可以使用乘法运算:
14) 数学函数
15) 字符串函数
循环,是一个无序的循环。 并不是从数组下标 ,因此使用时候需要注意。
16) 时间戳函数
printf格式化
格式和C语言的一样。支持 等。
其它详见:https://www.cnblogs.com/chengmo/archive/2010/10/08/1845913.html
sed
和grep、awk不同,sed更侧重对搜索文本的处理,如修改、删除、替换等等。
sed工作原理:sed会一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,成为"模式空间",接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。
语法
参数说明:
动作说明:
sed命令必须跟一个动作。
新建文件t.txt:
1)新增一行:第3行后新增:
2)插入一行:第3行前插入:
3)删除一行:删除第3行:
4)替换一行:
5)行内部分内容的替换:格式:
示例:
一些替换规则范例:
6)多行操作:
7)r命令
将a.txt文件内容读取并插入到t1.log文件第2行的下边。
注意:1、上述的操作均只在输出缓冲里操作,文件并没有变化;需要直接修改文件,前面加 参数;2、 参数可以没有。
xargs
之所以能用到这个命令,关键是由于很多命令不支持 管道来传递参数,而日常工作中有有这个必要,所以就有了 命令,例如:
sort
排序,默认按照字符升序排序。
以下面的内容为例:
按字符降序:
按数值降序:
去除重复行:
这个一般可以用来排序文件大小:
适用于多列的情况:
分别表示公司、员工数、最低工资。我们先按照员工数升序,如果员工数相同,按照最低工资升序:
按照员工工资降序排序,如果员工人数相同的,则按照公司人数升序排序:
uniq
用于去重,需要先执行sort。
示例:
注:uniq仅针对换行符是 ,对于windows下编写的文件如果换行符是 则无法排序。
参考
1、linux awk命令详解 - ggjucheng - 博客园
http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html
2、sed入门详解教程 - 肖邦linux - 博客园
https://www.cnblogs.com/liwei0526vip/p/5644163.html
3、Linux 入门记录:十七、Linux 命令行文本/文件处理工具 - mingc - 博客园
https://www.cnblogs.com/mingc/p/7616206.html
4、linux sort 命令详解 - 孙愚 - 博客园
https://www.cnblogs.com/51linux/archive/2012/05/23/2515299.html 5、OFS-输出字段分隔符 | awk
https://lvs071103.gitbooks.io/awk/content/awksyntaxandbasiccommands/ofs-.html
6、Awk关系运算符和布尔运算符 - 自由的代价永远是警惕 - CSDN博客
https://blog.csdn.net/liu454638324/article/details/41578031
7、linux awk 内置函数详细介绍(实例) - 程默 - 博客园https://www.cnblogs.com/chengmo/archive/2010/10/08/1845913.html
领取专属 10元无门槛券
私享最新 技术干货