1 概述
sort命令、uniq命令、join命令、cut命令、paste命令、split命令、tr命令和tar命令,能够实现对文件记录排序、统计、合并、提取、粘贴、分隔、过滤、压缩和解压等功能。
2 sort命令
-
定义
sort命令将输入文件看做由多条记录组成的数据流,而记录由可变宽度的字段组成,以换行符作为定界符。
-
说明
- 可将记录分成多个域进行处理,默认的域分隔符是空格符,域分隔符可由用户指定其他符号
-
语法
sort [选项] [输入文件]
-
sort命令选项及其意义
选项 意义 -c 测试文件是否已经被排序 -k 指定排序的域 -m 合并两个已排序的文件 -n 根据数字大小进行排序 -o [输出文件] 将输出写到指定的文件,相当于将输出重定向到指定文件 -r 将排序结果逆向显示 -t 改变域分隔符 -u 去除结果中的重复行
-
-
sort命令的用法
-
-t选项
sort命令分域对文件进行排序,默认的域分隔符是空格符,-t选项可用于设置分隔符。
sort -t: filename # -t与":"之间没有空格 # sort命令默认根据第1域对数据记录进行排序,如果第1域相同,再根据第2域排序,以此类推 # 当未指定-t时,分隔符是空格符,这时记录内开头与结尾的空格都将被忽略 # 当用-t选项改变分隔符时,空格符变得有意义
-
-k选项
-k选项指定排序的域。
sort命令以1表示第1域、以2表示第2域,依次类推。
sort -t: -k3 /etc/passwd # -k和3之间也没有空格
-
-n选项
-n选项可以指定根据数字大小进行排序
sort -t: -k3n /etc/passwd # -n选项不单独使用,一般放在域号之后
-
-r选项
-r选项用于将排序结果逆向显示
sort -t: -k3nr /etc/passwd # 利用-k3n选项将/etc/passwd文件的第3域从小到大排序,然后用-r选项将结果逆向显示
-
-u选项
-u选项用于去除排序结果中的重复行
sort -t: -u
-
-o选项
sort命令默认将排序后的结果输出到屏幕上
sort -t: -k1n -o outfile /etc/passwd
-
-c选项
-c选项用于测试文件是否已经排好序
sort -t: c /etc/passwd
-
-m选项
-m选项用于将两个排好序的文件合并成一个排好序的文件
在文件合并前,他们必须已经排好序
sort -t: m filename1 filename2
-
3 uniq命令
uniq命令用于去除文本文件中的重复行。
- uniq和sort -u命令的区别
- uniq命令去除的重复行必须是连续重复出现的行,中间不能夹杂任何其他文本行
- sort -u命令则是去除所有的重复记录
-
uniq命令选线及其意义
选项 意义 -c 打印每行在文本中重复出现的次数 -d 只显示有重复的记录,每个重复记录只出现一次 -u 只显示没有重复的记录 -
语法
uniq -c /etc/passwd
4 join命令
- 定义
join命令用于实现两个文件中记录的连接操作,即连接操作将两个文件中具有相同域的记录选择出来,再将这些记录所有的域放到一行(包含来自两个文件的所有域);
join命令在对两个文件进行连接时,两个文件必须都是按照连接域排好序的,按其他域排序无效。
-
语法
join [选项] 文件1 文件2
-
join命令选项及其意义
选项 意义 -a1或-a2 除了显示以共同域进行连接的结果外,-a1表示还显示第1个文件中没有共同域的记录,-a2则表示显示第2个文件中没有共同域的记录 -i 比较域内容时,忽略大小写差异 -o 设置结果显示的格式 -t 改变域分隔符 -v1或-v2 与-a选项类似,但是,不显示以共同域进行连接的结果 -1和-2 -1用于设置文件1用于连接的域,-2用于设置文件2用于连接的域 -
说明
-
-a和-v选项的区别在于
-a选项显示以共同域进行连接的结果,而-v选项则不显示这些记录
-
join命令的结果默认不显示未进行连接的记录,即默认显示连接记录在两个文件中的所有域,而且是按顺序来显示的。
-
-o选项用于改变结果显示的格式,可指定显示哪几个域、按什么顺序显示这些域
join -t: -o1.1 2.2 1.2 filename1 filename2
-
join命令默认比较文件1和文件2的第1域,当需要通过其他域进行连接,可使用-1和-2选项,-1用于设置文件1用于连接的域,-2用于设置文件2用于连接的域
join -t: -i -1 3-2 1 filename1 filename2 # 以文件1的第3域和文件2的第1域进行连接,并忽略大小写
-
-
5 cut命令
-
定义
cut命令用于从标准输入或文本文件中按域或行提取文本
-
语法
cut [选项] 文件
-
cut命令选项及其意义
选项 意义 -c 指定提取的字符数或字符范围 -f 指定提取的域数或域范围 -d 改变域分隔符 -
示例
cut -c3 /etc/passwd cut -c1-5 /etc/passwd # -c后跟数字表示字符数或字符范围,共3种表示方式 (1) -cn表示第n个字符 (2) -cn,m表示第n个字符和第m个字符 (3) -cn-m表示第n个字符到第m个字符
cut -d: -f1,4 /etc/passwd # 提取第1,4域 cut -d: -f1-4 /etc/passwd # 提取第1~4域
-
-
说明
cut命令灵活提取文本文件中的内容,它默认将提取的内容放到标准输出上,如果要将提取的内容保存到文件,可以使用文件重定向来实现。
6 paste命令
-
定义
paste命令用于将文本文件或标准输出中的内容粘贴到新的文件,它可以将来自不同文件的数据粘贴到一起,形成新的文件。
-
语法
paste [选项] 文件1 文件2
-
paste命令选项及其意义
选项 意义 -d 默认域分隔符是空格或tab键,设置新的域分隔符 -s 将每个文件粘贴成一行 - 从标准输入中读取数据 -
说明
paste命令不同于sort、join和cut命令改变域分隔符都是为了按域读取文件内容,paste命令改变域分隔符是用于设置输出文件的格式。
-
示例
paste -d: filename1 filename2
-
7 split
-
定义
split命令用于将大文件切割成小文件,split命令可以按照文件的行数、字节数切割文件,并能在输出的多个小文件中自动加上编号
-
语法
split [选项] 待切割的大文件 输出的小文件
-
选项及其意义
选项 意义 -或-l 此两个选项等价,都用于指定切割成小文件的行数 -b 指定切割成小文件的字节 -C 与-b选项类似,但是,切割时尽量维持每行的完整性
-
-
示例
# 每2行进行切割,输出文件的以小文件名字开头命名 split -2 /etc/passwd --说明 - 由于小文件有多个,split命令在小文件名后面自动加上编号以区分不同的小文件,编号为aa~zz - split命令所切割生成的小文件最多包含1000行记录
# 按每100B切割成小文件 split -b100 /etc/passwd --说明 - 当split命令不指定小文件的名字时,将自动以x开头、aa~zz为编号对这些小文件进行命名 - split命令-b选项在切割文件时仅考虑了文件大小,未考虑记录的完整性
8 tr命令
-
定义
tr命令实现字符转换功能,其功能类似于sed命令
-
语法
tr [选项] 字符串1 字符串2 <输入文件
-
选项及其意义
选项 意义 -c 选定字符串1中字符集的补集,即反选字符串1中的字符集 -d 删除字符串1中出现的所有字符 -s 删除所有重复出现的字符序列,只保留一个 -
说明
- "<输入文件" 表示将输入文件重定向到标准输入,tr命令只能从标准输入读取数据
- tr命令要么将输入文件重定向到标准输入,要么从管道读入数据。
-
示例
tr -d a-z </etc/passwd # 删除/etc/passwd中所有的小写字母 tr -d 0-9 </etc/passwd # 删除/etc/passwd中所有的数字 tr -d "[ ]" </etc/passwd
-
tr命令支持正则表达式的一部分以及POSIX字符类
选项 意义 八进制方式 a Ctrl+G 铃声
-
-