匹配、排序及查找命令
grep命令用来在指定文本文件中查找指定模式的单词或短语,并在标准输出上显示包括给定字符串模式的所有行,命令选项如下表所示。要搜索的模式就被看做是一些关键词、查看指定的文件中是否包含这些关键词。在使用时,如果没有指定文件,它们就从标准输入中读取。在正常情况下,每个匹配的行被显示到标准输出上。如果要搜索的文件不止一个,则在每一行输出之前加上文件名。命令格式为:
grep [options] filename
grep命令的选项
选项 | 功能说明 |
-E | 将查找模式看成是扩展的正则表达式 |
-F | 将查找模式看成是单纯的字符串 |
-b | 在输出的每一行前面显示包含匹配字符串的行在文件中位置,用字节偏移量来表示 |
-c | 只显示文件中包含配置字符串的行的总数 |
-i | 匹配比较时不区分字母的大、小写 |
-r | 以递归方式查询目录下的所有子目录中的文件 |
-n | 在输出包含匹配模式行之前,加上该行的行号 |
【例1】 在配置文件/etc/passwd 中查找包含字符串/neo)的所有行。
[root@localhost ~]# grep -F neo /etc/passwd
root:x:0:0:neo:/root:/bin/bash
neo:x:500:500::/hone/neo:/bin/bash
sort命令将逐行对指定文件中的所有行进行排序,并将结果显示在标准输出上。如果不指定文件名或者使用“ - ”表示文件,则排序内容来自标准输入。系统默认按照字符的ASCIⅡ编码顺序排序,如果要逆序排序,需要使用选项-r。
命今格式为:
sort [options] filename
【例2】系统中有文件file,txt,对它按行进行排序。
在ASCII编码表中,%、1、a、A的编码分别为37、49、65、97,所以出现以上的排序结果。sort命令还有其他的排序规则,需要使用到不同的选项来引用。
uniq命令读取输入文件,并比较相邻的行,去掉重复的行,只留下其中的一行。该命令加工后的结果存放到输出文件中。输入文件和输出文件必须不同,如果没有指明输入文件,则将结果显示到终端。
命令格式为:
uniq [options] inputfile outfile
常用选项说明如下。
-c:显示输出时,在每行的行首加该行在文件中出现的次数。
-d:只显示重复行。
-u:只显示文件中的不重复行。
【例3】删除文件filel.txt中重复的相邻行,将结果保存到file2.txt里。
find命令用于在目录结构中搜索文件,并执行指定的操作。find命令从指定的起始目录开始,递归地搜索其各个子目录,查找满足寻找条件的文件并对之采取相关的操作。命令格式为:
find [起始目录] 选项 操作
说明如下。
(1)起始目录:find命令所查找的目录路径。例如,用“.”来表示当前目录,用“/”来表示系统根目录。
(2)find命令常用选项如下。
-name:按照文件名查找文件。
-perm:按照文件权限来查找文件。
-user:按照文件属主来查找文件。
-mtime -n +n:按照文件的更改时间来找文件,一n表示文件更改时间距现在n天以内,+n表示文件更改时间距现在n天以前。
-type:查找某一类型的文件。
(3)操作:当查找出文件后所进行的命令处理,一般用-exec选项,后面跟所要执行的命令或脚本,然后是一对{ },一个空格和一个\,最后是一个分号。使用示例如下:
$ find $ HOME - print //查找当前用户主目录下的所有文件
$ find. - type f - perm 644 - exec ls - l { } \;//列出当前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件
$ find / - type f - size 0 - exec ls-l { } \;//查找系统中所有文件长度为0的普通文件,并列出它们的完整路径