一文带你从零掌握Linux文本分析处理命令,包括cat、sort、uniq、cut、paste、join、comm、diff、patch、tr、sed、aspell。
cat——进行文件之间的拼接并且输出到标准输出
常用选项:
-A,显示文本中的控制字符,如Tab和换行
-n,给文本行添加行号
-s,禁止输出多个空白行
sort——对文本行进行排序
sort可以把多个文件合并为一个有序的文件 >
选项:
-b(–ignore-leading-blanks)忽略每行开头空格,从第一个非空白字符开始排序
-f(–ignore-case)让排序不区分大小写
-n(–numeric-sort)基于字符串的数值来排序,而不是字母值
-r(–reverse)按相反顺序排序。结果按照降序排列,而不是升序。
-k(–key=field1[,field2])从对field1到field2之间的字符排序。
-m(–merge)把每个参数看作是预排序的文件。把多个文件合并成一个排好序的文件,不执行额外的排序
-o(–output=file)输出到文件
-t(–field-separator=char)自定义域分隔字符。默认域由空格或制表符分隔
几个应用场景:
#du命令指定文件或目录所占用的磁盘空间,结合sort -n和-r选项,输出占用磁盘空间最大的用户
du -s /usr/share/* | sort -nr | head
#对ls输出的文件大小进行排序
ls -l /usr/bin | sort -nr -k 5 | head
#可以有多个-k选项,即指定多个排序关键值
ls -l /usr/bin | sort --key=6r --key=5nr | head
uniq——通知或省略重复的行
给定一个排好序的文件,可以删除任意重复行,常与sort一块使用来清理重复输出。
选项:
-c 输出所有重复行,每行开头显示重复次数
-d 只输出重复行,而不是特有的文本行
-f n 忽略每行开头的n个字段,字段之间有且只能由空格分隔
-i 在比较文本行的时候忽略大小写
-s n跳过每行开头的n个字符
-u 只输出独有的文本行,默认。
- 切片和切块
cut——删除文本行中的部分内容
从文本行中抽取文本,可以接受多个文件参数或标准输入。cut抽取文本相当不灵活,最好从其他程序产生的文件中抽取文本,而不适用于人输入的文本。
选项:
-c char_list 从一个文本行中抽取由char_list定义的文本。这个列表可能是由一个或多个逗号分隔开的数值区间组成
-f field_list 从文本行中抽取一个或多个由field_list定义的字段。这个列表可能包括一个或多个字段,或由逗号分隔开的字段区间
-d delim_char 指定-f选项后,使用delim_char做字段分隔符。默认字段之间由单个tab字符分隔开
–complement 抽取整个文本行,除了那些由-c/或-f选项指定的文本
#使用-d指定:为分隔符
cut -d ':' -f 1 /etc/passwd | head
paste——合并文本行
与cut相反,会添加一个或多个文本列到文件中。
应用场景:将文件中的两个字段调换位置。
join——连接两文件中具有相同字段的行
类似关系型数据库,将多个享有共同关键域的表格数据结合起来。默认情况join命令使用空白字符作为输入字段的界定符,一个空格作为输出字段的界定符。可以通过选项修改。
- 文本比较
comm——逐行比较两个已排序文件
diff——逐行比较文件
patch——对原文件进行diff操作
- 非交互式文本编辑
tr——替换或删除字符
sed——用于文本过滤和转换的流编辑器
aspell——交互式拼写检查工具
其他还包括split(把文件分割成碎片)、csplit(基于上下文把文件分割成碎片)、sdiff(并排合并文件差异)