cat 命令
基本用法
- 显示整个文件的内容
cat filename
- 创建一个文件
cat > filename
- 合并文件
cat file1 file2 > file
- 附加文件
cat > filename
cat file1 file2 > file
参数
完整的 cat
指令使用方式如下
cat [-AbeEnstTuv] [--help] [--version] fileName
常用的主要有下面几个
-n
或–number
由 1 开始对所有输出的行数编号-b
或–number-nonblank
和-n
相似,只不过对于空白行不编号-s
或–squeeze-blank
当遇到有连续两行以上的空白行,就代换为一行的空白行
实验
最初的文本是这样子的
使用 -n
参数,然后打印结果
发现原文本所有的行的前面加入了一个行号,包括所有空行。
接下来我们使用 -b
参数,-b
参数的作用是给所有行行号,但不包括空白行。
-s
参数是我平时有用的参数,可以压缩空白行,可以把多条空白行压缩为一行
grep 命令
收先来认识下 grep
的三兄弟:grep
,egrep
,fgrep
grep
用于简单模式和基本正则表达式(BRE
); egrep
可以处理扩展的正则表达式(ERE
),等于 grep -E
。 fgrep
比两者都快,但只能处理固定模式,等于 grep -F
。在基本正则表达式(BRE
)中,只承认 ^, $, ., [, ], *
这些是元字符,所有其他的字符都被识别为普通字符。而在扩展正则表达式(ERE
)中,则在BRE的基础上增加了(, ), {, }, ?, +, |
等元字符。
grep
的作用是,给定的输入文件,搜索任何与一个或多个模式匹配的行。
基本用法
grep -l "first" *.txt
参数
grep
的用法如下
grep [-abcdDEFGHhIiJLlmnOopqRSsUVvwxZ] [-A num] [-B num] [-C[num]]
[-e pattern] [-f file] [--binary-files=value] [--color[=when]]
[--colour[=when]] [--context[=num]] [--label] [--line-buffered]
[--null] [pattern] [file ...]
-A
,-B
,-C
选项,如果后面接数字2,A
是打印后两行,B
是打印前两行,C
是打印前后两行-i
:一般都会加,忽略大小写-n
:输出行和行号-v
:打印不符合要求的行,即反选-o
:只打印符合要求的内容,而非整行。--color
: 给满足模式串的高亮显示-l
:找出内容中模式串的文件都有哪些,希望得到的是一个文件列表。而-L
是反选
实验
文本如图所示
输入命令 grep -C 1 -Ei --color '(.)\1{2}' test
意思就是找到所有字符串满足三个连续,高亮并输出前后两行。这里用到了 ERE
所以用到了 -E
选项
对于 -v
选项可以反选,输出不为模式串的行
对于 -l
和 -L
选项的测试结果如下
file指令
基本用法
file -i test.py
参数
file [bcCdEhikLlNnprsvzZ0] [-e test] [-f namefile] [-F separator] [-m magicfiles] [-M magicfiles] file...
-b
:可以使file
命令的输出不出现文件名,只显示文件格式以及编码。-i
:可以输出文件的MIME
类型字符串。-F
:更换分隔符:
,写法如右:file -F "=>" poetry.txt
-L
:查看软链接文件所指向文件的信息。-f
:我们通过-f
选项来指定这个一个文本文件,文本里面存储了所有文件名,file
命令会根据文本中的文件名逐个查看相应文件的类型信息。例子见实验。
实验
下面是一个基本的查找
利用 -f
选项,我们可以查看清单里面所有的文件类型
tree 指令
显示指定文件夹下的树形文件结构,默认为当前文件夹
du 指令
基础用法
- 查看文件夹的总用量
du -sh dir
- 查看文件夹各个文件和子文件夹大小,最后还会输出一个所有列出来文件大小总和
du -shc *
- 查看目录下所有文件和文件夹,递归访问
du
但一般来说会加上深度参数,Linux
下是--max-depth=<num>
, 而 macOS
下是-d <num>
,如果深度为1的话,实际上 du -hc *
会简单些,起到了一样的作用。
如上图所示,du
命令只会关心文件夹,输出的都是文件夹的空间使用量,而不会关注单个文件。所以 使用 -a
选项可以让他识别到文件。
du 和 ls 的区别
在实际中,我们往往可以发现以下的情况:
如上图所示,du
和 ls
所显示文件的空间各不相同,这是为什么呢?
其实,du
和 ls
在展示文件大小时,是存在着本质区别的:
du
展示的是磁盘空间占用量。ls
展示的是文件内容的大小。
与此同时,大部分文件系统规定:
- 一个数据块中最多存放一个文件的内容,当没存满时,剩余的空间不得被其他文件使用。
- 当一个文件的内容较大时,则可以存储到多个数据块中。
所以du
读取的文件最小为一个数据块的大小,这里是4K
cut 命令
基本指令
- 获取文件某一列内容
cut -d ',' -f 1 sample.csv # 根据分隔符
cut -c 1 sample.csv # 获取第一列的字符(即每一行的开头的字符)
参数
基本用法如下
usage: cut -b list [-n] [file ...]
cut -c list [file ...]
cut -f list [-s] [-d delim] [file ...]
-b
字节数 以字节为单位进行分割。-f
列号 指定提取第几列-c
字符范围 不依赖分割符来分割,而是通过字符范围进行字段提取-d
分隔符 按照指定的分割符进行分割
cut
的-b
选项和-c
选项在提取英文字母时效果差不多,提取中文时-b
选项就不太好用了,最好使用-c
选项,不然会乱码。
实践
根据分隔符获取第一列的元素的方法如下
然后获取每行第一个字母
awk 命令
更多有关
awk
的知识可以看:http://www.zsythink.net/archives/tag/awk/还有一篇文章是对上面的一个比较精简的总结:https://blog.51cto.com/12384628/2287482
grep
、sed
、awk
被称为 Linux
中的 "三剑客"。
我们总结一下这三个 "剑客" 的特长。
grep
更适合单纯的查找或匹配文本
sed
更适合编辑匹配到的文本
awk
更适合格式化文本,对文本进行较复杂格式处理
基本语法
awk [options] 'Pattern{Action}' file,file1...
下面是 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) | 倒数第二列 |
还有一些条件:
实践
下面是一个最简单的实践