linux中的一切都是文件,所以对文本的处理变得很重要,下面介绍几个常见的文本处理命令:
cat
cat的基本用法如下:
上图中我们创建了catTest.txt文件,文本的开头是一个制表位,第一行位置有一个换行。cat常用选项如下:
- -A 选项显示全部的字符。在使用cat显示catTest.txt时,默认是不显示特殊控制字符。如上图显示了包括前面的制表位^I和第一行末尾的行尾符$
- -n 选线为每行添加行号
在linux中有很多控制符号,如下图所示:
注:上表中的^K都可以使用Ctrl+K按键来实现。
针对^M:
DOS(windows系统)使用的换行为^M^J(回车+换行),称为CR与LF,在linux下只有LF(^J/换行)这个换行符号。在使用ssh向服务器传递windows下的文件时,文件中每行的结尾会出现一个^M,这样会在进行文件操作是出现错误,所以需要将^M删除,有两种方法:
- 将windows文件转换为unix文件,即dos2unix file
- 直接使用文本命令删除^M,tr -d '\r' filename
在linux中表示:
- 回车加换行\r\n
- 换行\n
sort
sort程序将命令行后指定的一个文件或多个文件的内容进行排序,然后把排序结果发送到标准输出。
sort的一般选项如下:
选项 | 描述 |
-b | 一般情况下sort的排序都是以每行的第一个字符开始的, -b选项使sort排序从第一个非空白字符开始排序 |
-f | 不区分大小写 |
-n | 根据字符串的数字值来进行排序 |
-r | 反向选择 |
-o | 指定输出文件 |
-t | 选择字段分隔符,默认情况下字段分隔符为空格或者制表符 |
-k filed1[,field2] | 对从field1到field2之间的字符排序,不是所有的 |
按照某个字段排序,sort命令一般是以空格或者制表符为默认的分隔符(每行的两个相同字段之间的空格数不一定相同,行之间的多个字段之间的空格也不用一致)
上图中是用-k 5表示使用第五个字段进行排序,字段的起始位置是1。事实上对一个字段的排序是对当前字段到行尾的所有字符的排序。
上图中按照第五个字段开始到行尾的字符进行排序。
sort还允许对多个字段分别进行排序,所以可以指定多个排序字段。
在第一个key选中的时候我们指定了一个区域,1,1表示开始于第一个字段,结束于第一个字段。在第二个字段中我们指定了2n,意味着字段使用数字排序。可以在字段位置后面添加 选项字母来进行排序,如b(忽略开头的空格),n(数 值排序),r(逆向排序)等等。
我们列表中第三个字段包含的日期格式不利于排序。那么我们怎样能按照时间顺序来排列这个列表呢?sort能提在key中指定偏移量。
通过指定-k 3.1,-k 3.4和-k 3.7来指定月,日,年为排序键值。从图中可以看出相同的排序字段,不同的书写顺序,结果是不一样的,最左边的排序键值的权重高。
在文件中不是所有的文件字段键的分割符都是空格或者制表符,所以我们需要可以自行指定分隔符。
sort使用-t选项指定分隔符。