匹配、排序及显示指定内容的命令:grep、sort、uniq

grep命令:该命令用来在文本文件中查找指定模式的词或短语,并在标准输出上显示包括给定字符串模式的所有行。该命令组包含三个命令:grep,egrep 和 fgrep 命令。grep命令一次只能搜索一个指定的模式;egrep命令等同于grep -E,可以使用扩展的字符串模式进行搜索;fgrep命令等同于grep -F,是快速搜索命令,它检索固定字符串,但不识别正则表达式。

一般格式:
grep [选项] 查找模式[文件名1,文件名2,…]
grep[选项] [-e查找模式| -f 文件][文件名1,文件名2,…]

说明:这组命令在指定文件中搜索特定模式及定位特定主题等方面用途很大。要搜索的模式被看做是一些关键词,查看指定的文件中是否包含这些关键词。这三个命令的功能类似,但由于可以搜索的模式不同,因此在功能强弱上有所差别。

如果没有指定文件,它们就从标准输入中读取。在正常情况下,每个匹配的行被显示到标准输出上。如果要搜索的文件不止一个,则在每一行输出之前加上文件名。

常用选项:
-E 将查找模式解释成扩展的正则表达式。
-F 将查找模式解释成单纯的字符串。
-b,--byte-offset 在输出的每一行前面显示包含匹配字符串的行在文件中的位置,用字节偏移量来表示。
-c,--count 只显示文件中包含匹配字符串的行的总数。
-f FILE 从文件FILE中获取模式,每行一个。空文件不含模式,因此,不做匹配。
-i 匹配比较时不区分字母的大小写。
-r 以递归方式查询目录下的所有子目录中的文件。
-n 在输出包含匹配模式的行之前,加上该行的行号(文件首行的行号为1)。
-v 只显示不包含匹配字符串的文本行。
-x 只显示整个行都严格匹配的行。

注意事项:
①在命令名之后先输入搜索的模式,然后是要搜索的文件。
②在文件名列表中可以使用通配符,如”*”等。
③要查找目录的子目录中的文件,应使用”-r”选项。
④如果在搜索模式的字符串中包含空格,应用单引号把模式字符串括起来。
⑤利用选项”-f”可以大批地在文件中搜索字符串。

示例:
①在密码文件/etc/passwd中查找包含”mengqc”的所有行:
# grep -F mengqc /etc/passwd
mengqc:x:500:100:mengqc:/home/mengqc:/bin/bash
②在mengqc目录和子目录下的所有文件中查找字符串”print”出现的次数:
# grep –r ‘print’ mengqc
③在文件f1和f2中查找包含”main”或者”printf”的所有行,不管首字母的大小写:
# grep –E ‘[Mm]ain | [Pp]rintf’ f1 f2
或者
# grep –i ‘main | printf’ f1 f2

sort命令:命令用来对文本文件的各行进行排序。

一般格式:sort [选项] 文件列表
说明:sort命令将逐行对指定文件中的所有行进行排序,并将结果显示在标准输出上。如果不指定文件或者使用“一”表示文件,则排序内容来自标准输入。排序比较是依据从输入文件的每一行中提取的一个或多个排序关键字进行的。排序关键字定义了用来排序的最小的字符序列。在默认情况下,排序关键字的顺序由系统使用的字符集决定。
选项:
-m 对己经排好序的文件统一进行合并,但不做排序。
-c 检查给定的文件是否己排好序,若没有,则显示出错消息,不做排序。
-u与-c 选项一起用,严格地按顺序检查;否则,对排序后的重复行只输出第一行。
-o 文件名 将排序输出放到该文件名所指定的文件中。如果该文件不存在,则创建一
个新文件。
改变排序规则的选项主要有:
-d 按字典顺序排序,比较时仅考虑空白符和字母数字符。
-f 忽略字母的大小写。
-i 忽略非打印字符。
-M 规定月份的比较次序是(未知)<”JAN”<”FEB”<…<”DEC”。
-r 按逆序排序。默认排序输出是按升序排序的。
-k n1[,n2] 指定从文本行的第n1字段开始至第n2字段(不包括第n2字段)中间的内容作为排序关键字。如果没有n2,则关键字是从第n1个字段到行尾的所有字段。n1和n2可以是小数形式。如”x.y”,x表示第x字段,y表示第x字段中的第y个字符。字段和字符的文职都是从1开始算起的。
-b 比较关键字时忽略前导的空白符(空格或制表符)。
-t 字符将指定的“字符”作为字段间的分隔符。
示例:
①对more_h10文件排序:
# head mfile>more_h10 (将文件mfile的前10行定向到文件moreeeh10中)
# sort more_h10
②以第3个字段作为排序关键字,对文件more_h10排序:
# sort –k2,3 more_h10

uniq命令:该命令从排好序的文件中去除重复行。
一般格式:uniq [选项] 文件
说明:uniq命令读取输入文件,并比较相邻的行,去掉重复的行一行。该命令加工后的结果写到输出文件中。输入文件和输出文件必须不同。用“一”表示,则从标准输入上读取。
选项:
-c 显示输出时,在每行的行首加上该行在文件中出现的次数。
-d 只显示重复行。
-f --skip-fields=N  忽略比较前N个字段。
-s --skip-chars=N 忽略比较前N个字段。
-u 只显示文件中不重复的行。
实例:
# uniq –u ex3  (显示文件ex3中不重复的行)

  • 抱歉,暂无相关文章。

3条评论

写评论
  • tanglei 回复

    其实可以讲讲多个命令组合。

  • 志言 回复

    有这么个情况:某目录A下有很多子目录AA,AB,AC等,这些子目录下都有名为123的子目录,要查找出这些子目录下后缀为.txt的文件,该用什么命令呢?这些目录深度有可能不同,但最终都是查找同名目录下的.txt文件。谢谢

    • sa 回复

      find /A -name “*.txt” 这样试试看!