文件数据处理
Linux下文件数据的处理也是常见的需求操作,当打开一个含有大量数据的文件时,怎样搜索其中我想要的信息;有的数据可能含有时间,若要按时间排序该怎么操作;以及将一个项目数据文件的归档,压缩的操作,下面开始介绍。
一:搜索数据:
对于文件数据处理,Linux中有3剑客(grep,sed,awk),其中广泛使用查找文件内容的一剑就是grep命令(或者其扩展格式egrep,fgrep),其命令行格式如下:
grep [options] pattern [file]
搜索后,输出返回所有的就是包含Pattern关键字的行,下表是针对options中的会常用几个介绍,关于更多的option指令解释,有兴趣可以使用man grep命令进行查看:
Class | Options | Describe |
---|---|---|
通用显示 | -V | 显示Version |
匹配模式选择 | -E | 扩展grep功能(类似egrep) ,意味着可以使用正则表达式,可以直接用egrep |
匹配模式选择 | -F | 扩展grep功能(类似fgrep),它是搜索字符串而不是搜索匹配表达式的模式,它使用快速压缩算法,故它相较于-E扩展和-G搜索同一个字符串内容速度会快一些;若同时在多个文件查找,则返回匹配的文件名;可以直接用fgrep命令 |
匹配模式选择n | -G | grep命令的默认匹配功能 |
匹配控制 | -e | 指定字符串作为查询,可以同时用-e [字符串]指定多组同时查找,输出查找的内容也会按顺序显示 |
匹配控制 | -i | 忽略字符串大小写区别 |
匹配控制 | -v | 反转查找,只打印未匹配到的信息 |
匹配控制 | -w | 只匹配全单词,单词部分不能 匹配,ex:搜索Student,文中的Students就不能匹配 |
通用输出控制 | -c | 符合寻找数据的总行数,若用-vc则可以显示有多少行未匹配 |
通用输出控制 | –color | 将匹配到的相关内容以颜色显示,color定义可通过环境变量GREP_COLOR设定 |
通用输出控制 | -L | 查找并返回没有符合指定文本内容的文件名,需注意:在第一个匹配的文件名出现后,搜索即停止 |
通用输出控制 | -l | 查找并返回符合指定文本内容的文件名,需注意:在第一个匹配的文件名出现后,搜索即停止 |
通用输出控制 | -o | 僅显示匹配到的字符串, |
通用输出控制 | -q | 静默输出,即在标准输出中不显示任何内容,如果有匹配的字符,exitcode会是0 |
输出行前缀控制 | -n | 显示匹配内容的行号 |
内容行控制 | -A | 显示被模式匹配到的行以及之后的行内容 |
内容行控制 | -B | 显示被模式匹配到的行以及之前的行内容 |
内容行控制 | -C | 显示被模式匹配到的行以及前后各行内容 |
PS:使用grep操作匹配时,注意使用双引号,若单引号为强引用,需要防止有可能被系统误认为参数或者命令,从而报错
几个操作示例如下:
【查看grep版本信息】
【多字符串搜索】
【字符串符合与不符合行数搜索】
【全单词匹配搜索】
【前后显示行数限制搜索】
对于正则表达式该如何使用部分,会通过上面的链接另一篇进行介绍。
二:排序数据:
排序数据用到的命令就是sort了,这个基本看名字就知道命令是排序了,命令格式如下:
sort [option] File
针对option部分,相关常用指令整理如下表,同样,如果想了解更多,可以直接用man sort查看。
Class | Options | Describe |
---|---|---|
排序选项 | -k(–key=POS1[,POS2]) | 排序从POS1位置开始,若指定POS2的话会到POS2结束 |
排序选项 | -t (–field-separator=SEP) | 制定一个用来区分排序位置的字符,比如’:’ |
排序选项 | -n | 将数组识别成数字而不是字符,并按值进行排序 |
排序选项 | -g | 将按通用数值进行排序(不同于-n,会将值当浮点数来排序,支持科学计算表示的值) |
排序选项 | -M | 按月进行排序,使用此就可以按3字符月份进行排序 |
排序选项 | -o(或–output=file) | 排序结果输出到指定文件中 |
排序选项 | -r | 反序排序(升序变成降序) |
排序选项 | -b | 排序时忽略起始位置的空白 |
排序选项 | -i | 排序时忽略不可打印字符 |
排序选项 | -d | 僅考虑空白和字母,不考虑特殊字符排序 |
排序选项 | -f | 忽略大小写排序排序,若有大写字母,会排在前面 |
Ps:举例:目前想看当先系统有那些用户,并将用户根据ID信息来进行排序,则可以主要针对passwd文件进行排序操作显示,如下图:
通过-t指定分隔符,-k指定起始排序字段(从1开始数)
三:压缩数据:
压缩包大家都有接触过,平常用的windows系统下常见的zip包,而Linux下常见的gzip,gzip包是GNU项目产物,主要是用来替代原先Unix下的compress工具包的免费版本,gzip包括以下3种工具:
- gzip:用来压缩文件
- zcat:用来查看压缩过的文本文件内容
- gunzip:用来解压文件
gzip包平时除了单个文件压缩,可以通过通配符批量压缩文件夹下的单个文件,具有便利性,举例如下:
解压gz文件
查看gz中文件内容(无需解压操作)
四:归档数据:
gzip命令在处理Linux下单个文件时很实用,但是对于Linux下的归档标准工具命令则是tar;tar命令开始是用来将文件写到磁盘上归档使用,但它也能将输出写到文件里,故变成Linux中普遍使用的归档工具命令,也是开源程序普遍采用的方法,其格式如下:
tar function [options] Object1 Object2…
Class | Options | Describe |
---|---|---|
function | -c(–create) | 创建一个新的tar文件 |
function | -A(–concatenate) | 将已有的tar文件追加到另外一个已有的tar文件 |
function | -r(–append) | 追加文件到已有的tar文件末尾 |
function | -t(–list) | 显示已有的tar文件的内容 |
function | -u(–update) | 将现有tar文件中新的同名文件追加到该tar文件中,即更新tar文件 |
function | -x(–extract) | 从已有tar文件提取文件 |
function | -d(–diff) | 检查归档文件与文件系统的不同之处 |
function | –delete | 将现有tar文件中删除 |
针对每个function功能,可以使用option追加對归档文件的特定行为,下面为常见选项:
Class | Options | Describe |
---|---|---|
option | -C dir | 切换到指定目录 |
option | -f file | 切换到指定目录 |
option | -p | 保留所有文件权限 |
option | -v | 在处理文件时显示文件 |
option | -z | 将输出重定向给gzip命令来压缩内容 |
option | -j | 将输出重定向给bzip2命令来压缩内容 |
上述命令通常是搭配一起使用 ,比如:
将几个文件批量归档到一个tar文件(包括文件夹和gz文件):
列出上面归档的tar1.tar文件中的内容,但是不提取tar文件: