Bonky
Neither believe nor reject anything, because any other person has rejected or believed it. Heaven has given you a mind for judging truth and error, Use it.
By Thomas Jefferson

Linux常用的文件处理指令

cat 命令

基本用法

  • 显示整个文件的内容

  • 创建一个文件

  • 合并文件

  • 附加文件

参数

完整的 cat指令使用方式如下

常用的主要有下面几个

  • -n–number 由 1 开始对所有输出的行数编号
  • -b–number-nonblank-n 相似,只不过对于空白行不编号
  • -s–squeeze-blank 当遇到有连续两行以上的空白行,就代换为一行的空白行

实验

最初的文本是这样子的

屏幕快照 2019-09-07 下午5.46.45

使用 -n 参数,然后打印结果

屏幕快照 2019-09-07 下午5.48.14

发现原文本所有的行的前面加入了一个行号,包括所有空行。

接下来我们使用 -b 参数,-b 参数的作用是给所有行行号,但不包括空白行。

image-20190907175234578

-s 参数是我平时有用的参数,可以压缩空白行,可以把多条空白行压缩为一行

image-20190907175355715

grep 命令

收先来认识下 grep 的三兄弟:grep,egrep,fgrep

grep用于简单模式和基本正则表达式(BRE); egrep可以处理扩展的正则表达式(ERE),等于 grep -Efgrep比两者都快,但只能处理固定模式,等于 grep -F。在基本正则表达式(BRE)中,只承认 ^, $, ., [, ], *这些是元字符,所有其他的字符都被识别为普通字符。而在扩展正则表达式(ERE)中,则在BRE的基础上增加了(, ), {, }, ?, +, |等元字符。

grep的作用是,给定的输入文件,搜索任何与一个或多个模式匹配的行。

基本用法

参数

grep 的用法如下

  • -A-B-C 选项,如果后面接数字2,A 是打印后两行,B是打印前两行,C 是打印前后两行
  • -i :一般都会加,忽略大小写
  • -n:输出行和行号
  • -v:打印不符合要求的行,即反选
  • -o:只打印符合要求的内容,而非整行。
  • --color: 给满足模式串的高亮显示
  • -l :找出内容中模式串的文件都有哪些,希望得到的是一个文件列表。而 -L 是反选

实验

文本如图所示

屏幕快照 2019-09-07 下午7.49.44

输入命令 grep -C 1 -Ei --color '(.)\1{2}' test 意思就是找到所有字符串满足三个连续,高亮并输出前后两行。这里用到了 ERE 所以用到了 -E 选项

image-20190907195313781

对于 -v 选项可以反选,输出不为模式串的行

image-20190907195756310

对于 -l-L 选项的测试结果如下

image-20190907195603751

file指令

基本用法

参数

  • -b :可以使 file 命令的输出不出现文件名,只显示文件格式以及编码。
  • -i:可以输出文件的 MIME 类型字符串。
  • -F:更换分隔符 : ,写法如右:file -F "=>" poetry.txt
  • -L:查看软链接文件所指向文件的信息。
  • -f:我们通过-f选项来指定这个一个文本文件,文本里面存储了所有文件名,file 命令会根据文本中的文件名逐个查看相应文件的类型信息。例子见实验。

实验

下面是一个基本的查找

屏幕快照 2019-09-07 下午8.20.36

利用 -f 选项,我们可以查看清单里面所有的文件类型

屏幕快照 2019-09-07 下午8.35.56

tree 指令

显示指定文件夹下的树形文件结构,默认为当前文件夹屏幕快照 2019-09-07 下午9.31.02

du 指令

基础用法

  • 查看文件夹的总用量

  • 查看文件夹各个文件和子文件夹大小,最后还会输出一个所有列出来文件大小总和

  • 查看目录下所有文件和文件夹,递归访问

但一般来说会加上深度参数,Linux 下是--max-depth=<num> , 而 macOS 下是-d <num>,如果深度为1的话,实际上 du -hc * 会简单些,起到了一样的作用。

屏幕快照 2019-09-07 下午9.47.02

如上图所示,du 命令只会关心文件夹,输出的都是文件夹的空间使用量,而不会关注单个文件。所以 使用 -a 选项可以让他识别到文件。

du 和 ls 的区别

在实际中,我们往往可以发现以下的情况:

屏幕快照 2019-09-07 下午9.52.15

如上图所示,duls 所显示文件的空间各不相同,这是为什么呢?

其实,duls 在展示文件大小时,是存在着本质区别的:

  • du 展示的是磁盘空间占用量。
  • ls 展示的是文件内容的大小。

与此同时,大部分文件系统规定:

  1. 一个数据块中最多存放一个文件的内容,当没存满时,剩余的空间不得被其他文件使用。

  2. 当一个文件的内容较大时,则可以存储到多个数据块中。

所以du 读取的文件最小为一个数据块的大小,这里是4K

cut 命令

基本指令

  • 获取文件某一列内容

参数

基本用法如下

  • -b 字节数 以字节为单位进行分割。

  • -f 列号 指定提取第几列

  • -c 字符范围 不依赖分割符来分割,而是通过字符范围进行字段提取

  • -d 分隔符 按照指定的分割符进行分割

cut-b选项和-c选项在提取英文字母时效果差不多,提取中文时-b选项就不太好用了,最好使用-c选项,不然会乱码。

实践

根据分隔符获取第一列的元素的方法如下

屏幕快照 2019-09-08 上午12.09.46

然后获取每行第一个字母

屏幕快照 2019-09-08 上午12.13.42

awk 命令

更多有关 awk 的知识可以看:http://www.zsythink.net/archives/tag/awk/

还有一篇文章是对上面的一个比较精简的总结:https://blog.51cto.com/12384628/2287482

636544-20180715150312527-414617760

grepsedawk 被称为 Linux 中的 “三剑客”。

我们总结一下这三个 “剑客” 的特长。

grep 更适合单纯的查找或匹配文本

sed  更适合编辑匹配到的文本

awk  更适合格式化文本,对文本进行较复杂格式处理

基本语法

下面是 awk 内置变量

变量 说明
FS 指定输入字段分隔符,默认为空白字符
OFS 指定输出字段分隔符,默认为空白字符
RS 指定换行符(输入换行符),指定输入时的换行符,默认为回车键
ORS 指定换行符(输出换行符),指定输出时的换行符,默认为回车键
NF 分割的字段数量
NR 行号
FNR 分别计数每个文件的行号
FILENAME 当前文件名
ARGV 数组
ARGC 数组的长度,即命令行参数的个数

算数函数

常用算数函数 说明
rand 产生 6 位数的随机数
srand 产生变化的 6 位随机数
int 可用于截取整数部分

字符串函数

常用字符串函数 说明
gsub 改变所有符合匹配条件的字符
sub 改变符合匹配条件的第一个字符
length 获取字符串
index 获取字符所在位置
split 分割字符串
asort 排序
asorti 函数通过下标进行排序

内置变量

内置函数 说明
$0 整行
$NF 分割后的最后一列
NF 分割后的段数
$(NF-1) 倒数第二列

还有一些条件:

de5f34115c0fa2c0b467706d5660aac2

实践

下面是一个最简单的实践

屏幕快照 2019-09-08 上午1.18.03

Share

You may also like...

发表评论

电子邮件地址不会被公开。 必填项已用*标注