正在学习Linux,记录一下学习历程。参考《Unix&Linux大学教程》(幽默感+事无巨细),进行了精简摘要和总结。
组合文件:cat
将数据未加改变地复制到标准输出,数据可以来源于标准输入或文件(一个或多个)。
选项:
-n 在每行前面加一个行号
-b 和-n一起使用,不对空白行编号
-s 将多个连续空白行替换为一个空白行
如:cat -nbs name address phone
划分文件:split
将一个大文件划分为几个较小的新文件
选项:
-l 指定新文件的最大大小
-d 新文件名使用数字后缀(默认后缀为字母后缀)
-a 指定后缀中使用的数字或字母个数(默认为2位,即数字后缀为00~99,字母后缀为aa~zz)
待分割文件名后可跟指定新文件名(默认为x)
如:split -d -a 3 -l 50 file splitfile
反转文本行的顺序:tac
将文本写入标准输出之前将文本各行的顺序反转
在整个文本中以行为单位进行操作
与cat使用相似(tac是cat的反向拼写)
反转字符的顺序:rev
将各行中字符的顺序反转
在每行中以字符为单位进行操作
从数据开头选择数据行:head
选项:
-n 希望选取的数据行数量(也可直接在-后加行数)
从数据末尾选择数据行:tail
选项:
-n 希望选取的数据行数量(也可直接在-后加行数)
删除数据列:colrm
从标准输入读取数据,删除指定的数据列,然后将剩余数据写入标准输出
colrm startcol endcol (列的编号从1开始)
如:colrm 3 5
删除第3~5列
若只有一个列编号,则从此列到末尾。
比较任意两个文件:cmp
查看两个文件是否相同(对应字节完全相同),每次一个字节地比较文件。
cmp file1 file2
若相同,则不做任何处理(没有消息,就是好消息)
若不相同,显示出不匹配消息
比较有序文本文件:comm
一行一行地比较两个有序的文本文件
允许查看两个文件之间的相同和不同之处
comm file1 file2
以三列显示输出:
第一列,file1中独有的行
第二列,file2中独有的行
第三列,file1和file2中都有的行
经常用于比较一个有序文件的两个有细小区别的版本
选项:
-1 不显示第一列输出(file1中独有的行)
-2 不显示第二列输出(file2中独有的行)
-3 不显示第三列输出(共有的行)
ps:comm应用于排序文本文件(如学生名单,经过排序,且上下行之间没有什么联系),若需要比较两个不希望排序的文件(如不希望将数据搞乱),则要用diff。
比较无序文本文件:diff
可用于跟踪程序各版本之间的变化
diff file1 file2
当比较的两个文件相同时,不显示任何输出。
当不同时,输出可以把file1改为file2的提示:
使用3个不同的单字符提示,c(change),d(delete),a(append)
每个字符左边和右边都有一串行号,左边指向file1中的行,右边指向file2中的行。
file1中的行由一个<字符标记,file2中的行由一个>字符标记,两个文件之间的行由---分隔开。
如:
file1内容:
aaa
bbb
ccc
ddd
file2内容:
cccccc
ddd
eee
输出情况为:
1,2d0
<aaa
<bbb
3c1
<ccc
---
>cccccc
4a3
>eee
若要更改file1为file2则需:
删除file1的第1,2行
将file1的第3行改为file2的第1行
在file1的第4行后追加file的第3行
选项:
-i 不区分大小写
-w 忽略所有的空白符
-b 忽略空白符数量上的区别
-B 忽略所有的空白行
-q 当两个文件不同时,省略所有细节(相当于cmp)
-s 当两个文件相同时,显示提示信息
-c 不再显示指示和行号,而显示存在不同的实际行,同时还显示不同行的上下各两行的内容(行前的+代表a,-代表d,!代表c)
-u 类似于-c,但是没有重复行
-y 对应行并排显示
ps:将一个文件转换成另一个文件的一串指令称为一个差分(diff),当发布差分以更新程序时,差分称为补丁(patch)。
抽取数据列或字段:cut
从一个数据中抽取指定列或字段并将其他内容抛弃
选项:
-c 指定列范围(可以是一个或多个列,列号之间用,隔开,也可以是像3-9这样的范围,还可以混合使用)
-f 指定字段范围
-d 指定分界符(如‘ ’,‘:’)
-s 抛弃不包含任何分界符的行
组合数据列:paste
水平组合分离的文件数据,可以将几个文件(每个文件都包含一列数据)组合成一个大表
选项:
-d 指定分界符(若指定多个字符,则轮流重复使用)
创建行号:nl
在文本中插入行号
选项:
-v 指定起始编号
-i 指定增量
-b a 强制对所有行编号(默认是不对空白行编号)
统计行,单词和字符数量:wc
输出:
行数 单词数 字符数 文件名
选项:
-l 只统计行
-w 只统计单词
-c 只统计字符
-L 显示最长行的长度
将制表符转换为空格:expand
将所有的制表符都改为空格,并且同时维持与原始文本相同的对齐方式
选项:
-t 设置制表符大小
-i 只转换行开头的指标符
将空格转换为制表符:unexpand
相当于expand的逆过程
默认情况下,只替换行开头的空格。因为,大多数情况下,只使用unexpand进行缩进。
选项:
-t 指定制表符大小
-a 替换所有空格
格式化行:fold
将长行分隔成短行,在合适的位置插入回车符
选项:
-w 指定新行的最大宽度(默认为80)
-s 不分隔单词
格式化段落:fmt
将段落中的各行连接在一起,从而使段落尽可能短小和紧凑,而且不改变内容和空白符
假定段落由空行分隔,一个段落就是一个或者多个连续的文本。
格式化规则:
行宽:每行尽可能长,但是不能超过指定长度
句子:尽可能在句子末尾分隔行。避免在句子的第一个单词之后或者最后一个单词之前分隔行
空白符:保持单词以及空行之间的所有缩进,空格
制表符:读取文件时所有的制表符转换为空格,并在最后的输出中的合适位置上插入新的制表符
选项:
-w 指定行的最大宽度(默认为75)
-u 统一间距,从而使单词之间最多只有一个空格,句子末尾最多只有两个空格
-s 仅拆分长行,不连接短行
格式化页或列:pr
格式化页:
默认情况:在顶端插入一个标题,左边插入一个边缘,底部插入一个页尾。标题和页尾各占用5行。左边缘和页尾只用于间距,为空白。标题在其中间行上包含信息(文件上一次修改的日期和时间,文件名称,页号)
选项:
+beg:end beg是需要格式化的起始页号,end是最后页号
-h 指定标题中间的文本(默认为文件名)
-l 指定每页行数
-o 指定左边缘大小
-W 指定输出宽度
-d 使用双倍行间距文本
-t 页之间没有分隔,即把标题移除
格式化列:
选项:
- 指定输出列的数量
-l 指定每页的行数
-W 指定输出宽度
-m 将多个文件分别格式化成单独的列
-t 移除标题
ps:原始文件并没有发生改变,改变的是标准输出的数据