一:对文件内容进行排序
sort这个命令可以对正文内容进行排序,还会将结果输出到标准输出中,而且原始文件中的内容不会发生任何改变。默认情况下,这个命令可以让内容按升序进行排序。如果有多个输入文件,那么每个文件中的内容都将重新排列并连续输出。
格式: sort [选项] 文件名
下面是sort命令的几个选项,如下表所示:
选项 | 说明 |
-n | 按数字的大小进行排序 |
-b | 忽略每行开始处的空白 |
-f | 排序时不区分大小写 |
-r | 降序排序 |
-u | 排除重复的行 |
以/bin目录下的apg文件为例使用sort排序。不加任何选项时,表示对文件内容进行升序排序,执行sort -fr apg时,表示降序排列文件内容并且不区分大小写字母,演示如下图所示:
二:转换文件内容的格式
tr命令可以将标准输出的字符串换为指定的格式,然后显示出来。
格式: tr [选项] 字符组1 [字符组2]
tr命令的基本选项如下表所示:
选项 | 说明 |
-d | 删除匹配的字符 |
-s | 多于重复的字符只保留一个 |
-t | 删除字符组1里多出的字符(与字符组2相比) |
演示如下图所示:
上述第一个命令tr 'a-z' 'A-Z'命令表示把输入的字符从小写转换为大写,如果想结束输入,可以使用 ctrl + d键即可。
第二条命令: tr -d 'in'表示删除输入的内容中含有i和n这两个字符的文本内容,注意ie是两个字符而不是字符串ie。
三:删除文件相同重复的行
如果想要删除文件里面相邻重复的行,可以使用uniq命令.这个命令可以从文件中读取内容,删除相邻重复的行,输出的结果不会改变原文件里面的内容。
格式如下: uniq [选项] 文件名
uniq常用的选项如下表所示:
选项 | 说明 |
-c | 在每行之前显示出现的次数 |
-d | 只输出重复的行 |
-u | 只显示出现一次的行 |
下面我给大家以我创建的file1文件为为例演示截图如下:
这个文件里面有行内容,其中5行和6行失宠的内容,执行uniq fiel1后,可以发现删掉了一行重复的内容。
如果在加上-c选项,就可以看到重复出现的次数了,如下图所示:
三:将文件里的制表符换成空格
这个命令就是expand命令。如果想把输出结果存入文件里,可以使用重定向。
格式:expand [选项] 文件名
expand命令常用的选项是-t,它可以指定空白字符替代制表符的格式。想看文件里的制表符组合可以使用cat -T命令,文件里^l就是Linux中的制表符。默认情况下,制表符替换为半角空格,默认空白字符的个数为8.
如果想要指定文件中要对齐的空白字符数,则要使用-t。
四:替换、新增、删除等操作
这个命令就是sed,是很全能的命令,而且用法也是千变万化的。sed对文件的操作只会显示在输出结果中,不会改变原文件中的内容。
格式: sed [选项] [表达式] [文件名]
sed命令中的表达式需要使用引号括起来。虽然表达式千变万化,但是首先掌握常用的表达式用法总是没错的,如下表所示:
表达式 | 说明 |
s/旧模式/新模式/ | 对于每一行,都将与旧模式匹配的第一个字符串转换为新模式 |
s/旧模式/新模式/g | 将于旧模式匹配的全部字符串转换为新模式 |
s/$/字符串/ | 在每行文件末尾添加字符串 |
/^$/d | 删除文件中的空白行 |
我要使用sed命令替换文件fiel2中的user字符串,可以这样书写表达式:'s/user/c++',不过这个表达式只会替换文件中每行第一个符合表达式的字符串,如下图所示:
如果想要替换文件中所有符合表达式的字符串,可以使用’s/user/c++/g‘表达式,如下图所示:
sed命令的删除功能也很有意思,不同的组合可以删除的范围也不同。如果想要删除fiel2文件中的第2行,可以在d的前面加一个数字2,如下图所示:
如果想删除的内容不止一行,表达式可以灵活的变为:’3,4d‘其中的3和4表示第3行到第4行,如下图所示:如果想删除指定文件中的内容,使用这个方法还是比较方便的,尤其是大文件。