Linux命令行文本工具

浏览文件

示例: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

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20181202G07I5100?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券