Shell编程之---grep命令详解

grep 一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来

grep [option]  [mode]  [file]

-c       #只输出匹配行的数量

-i       #搜索时忽略大小写

-h       #查询多文件时不显示文件名

-l       #只列出符合匹配的文件名,而不列出具体的匹配行

-n   #列出所有的匹配行,并显示行号

-s   #不显示不存在或无匹配文本的错误信息

-v   #显示不包含匹配文本的所有行

-w   #匹配整词

-x   #匹配整行

-r   #递归搜索,不仅搜索当前工作目录,而且搜索子目录

-q   #禁止输出任何结果,以退出状态表示搜索是否成功

-b   #打印匹配行距文件头部的偏移量,以自己为单位

-o   #与-b选项结合使用,打印匹配的词距头部的偏移量,以字节为单位

-E   #支持扩展的正则表达式

-F   #不支持正则表达式,按照字符串的字面意思进行匹配

grep -c root /etc/passwd   #文本中有两个root匹配,即显示行数为2

grep -i xxx  1   #文本中有XXX和xxx,-i之后会忽略大小写都输出出来

grep -h root /etc/passwd /etc/shadow  
#原本查询多文件时,匹配会显示出文件名及匹配行,加-h之后只会显示匹配的行,而不会显示匹配与哪个文件

grep -l root /etc/passwd /etc/shadow  
#加-l之后只会显示匹配的文件名,而不列出具体的匹配行

grep -n root /etc/passwd         
#-n在输出匹配结果前面会加匹配的行号

grep -s root /etc/passwd         
#不显示错误信息,例如: grep root /etc/passwdwdwd

grep -v root /etc/passwd  
#列出除了匹配行root以外的所有行

grep -w root /etc/passwd          
#列出文件中有单个root的单词的行

grep -x root /etc/passwd  
#列出文件中有单个root为整行的行

grep -r root /tmp          
#列出/tmp下面的root及子目录文件下的root,递归查询出所有的root字符

grep -q root /tmp/root    
#不输出任何信息,以退出方式,成功为0,不成功为其他值

grep -vc root /etc/passwd /etc/shadow       #显示出文件pass和sha中有多少行是不包含root的行

1、匹配行首

(1)、检索"/etc/passwd"中以"root"开头的行,并打印出行号

grep -n ^root /etc/passwd

(2)、检索"/etc/services"文件中的空行,列出行号。再次检索空行有几行

grep -n ^$ /etc/services

grep -c ^$ /etc/services

(3)、搜索文件中以"-"开头,并且重复任意次,然后是D字符的匹配行

搜索文件中以"/"开头,中间"4"个任意字符,第"6"个字符仍为"/"的匹配行

grep ^-*D filename

grep ^/..../ filename

(4)、搜索"sed.edu.cn"的匹配行

grep sed\.edu\.cn

(5)、搜索"-"符号重复5次的文本行

搜索"the"精确匹配的行

grep ‘\-\{5\}‘ filename  #考验‘‘和\{\}表达式的特性

grep ‘\<the\>‘ filename  #考验‘‘和\<\>表达式的特性

grep    #标准grep命令。支持正则表达式

egrep   #扩展grep命令。支持基本和扩展正则表达式

fgrep   #快速grep命令。不支持正则表达式,按照字符串的字面意思进行匹配

egrep 命令与 grep -E等价

fgrep 命令与 grep -F等价

分析下面的正则表达式表达了什么含义

(1)、kK*         grep kK* test             #列出文件test包含kK及后面有任意多个字符的行

(2)、k\{6,8\}    grep  ‘k\{6,8\}‘ test    #列出文件test中k单词重复6-8个的行

(3)、k\{6,\}     grep  ‘k\{6,\}‘ test      #列出文件test中k单词大于6个的行

(4)、k\{10\}     grep  ‘k\{6\}‘ test      #列出文件test中k单词为6个的行

(5)、^NEW YEAR$

(6)、^$           #空行

(7)、[0-9][0-9][a-z]  grep [0-9][0-9][a-z] file  
  #列出文件中前两个字符为数字,后一个字符为字母的匹配行

(8)、[A-H]\{1,3\},[0-9]\{5\} #grep ‘[a-h]\{1,3\}‘ test | grep ‘[0-9]\{5\}‘  #列出1-3个a-h单词,5个数字的字符

(9)、^\...

(10)、[^p-z]*\.         #列出除了p-z以外的多个任意字符的行

2、利用通配功能列出某目录下所有以数字开头,最后3为是句点和2个任意字母的文件名

[0-9]*[a-z]\{2\}...

3、查看下面三条命令

grep -c  ^$   filename    #列出空行的数目

grep -c ^[^$] filename    #列出非空行的数目

grep -c ^^$   filename

4、统计当前目录及子目录下的所有文件所包含空白行的行数

grep -r ^$ /root/ | wc -l

5、统计当前目录及子目录下的所有文件包含非空白行的行数

grep -r ^[^$] /root/ | wc -l

6、结合对-符号的阐述,观察是否对错

grep -n -\{5,\}  file   #缺引号,缺转义符\-

grep -n ‘-\{5,\}‘ file  #缺转义符,系统默认不知道-是选项

grep -n ‘\-\{5,\}‘ file #正确

时间: 2024-10-22 06:53:16

Shell编程之---grep命令详解的相关文章

Shell编程之---awk命令详解

awk编程 awk是一种编程语言.gawk.是最新版本,当前的linux版本用的都是gawk awk是gawk的软链接 awk工作原理 BEGIN   #在未读取文件行之前执行 主输入循环 (main input loop),反复执行,直到终止条件触发 END     #在读取文件行完毕后执行 awk的三种调用方法 1.在shell命令行输入命令调用awk #awk [-f 域分隔符] 'awk cmd' file 2.在awk程序段插入脚本文件,然后通过awk命令调用他 #awk -f 'aw

Shell编程之---sed命令详解

sed 是一个非交互式文本编辑器,它可对文本文件和标准输入进行编辑 sed只是对缓冲区中原始文件的副本进行编辑,并不编辑原始的文件 sed命令调用的三种方式 1.在shell命令行输出命令调用sed sed  [option]  'sed cmd'  file 2.将sed命令插入脚本 sed  [option] -f  'sed.sh'  file #vi sed.sh    sed要调用的脚本为sed.sh #/file:/a\This is a test line!!! 调用脚本 #sed

grep命令详解

grep命令是linux下的行过滤工具,其参数繁多,下面就一一介绍个个参数的作用,希望对大家有所帮助.grep -- print lines matching a pattern (将符合样式的该行列出)◎语法: grep [options] PATTERN [FILE...] grep用以在file内文中比对相对应的部分,或是当没有指定档案时, 由标准输入中去比对. 在预设的情况下,grep会将符合样式的那一行列出.此外,还有两个程序是grep的变化型,egrep及fgrep. 其中egrep

linux grep命令详解

linux grep命令详解 http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2856896.html grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来. Unix的grep家族包括grep.egrep和fgrep.egrep和fgrep的命令只跟gr

grep 命令详解及相关事例

一.匹配字符 .    匹配任意单个字符 [ ]  匹配指定范围内的任意字符 [^]  匹配飞指定范围内的任意字符 [:alpha:] 字母字符 [:lower:] 小写字母字符 [:upper:] 大写字母字符 [:digit:] 数字 [:alnum:] 字母数字字符 [:space:] 空白字符(禁止打印),如回车符.换行符.竖直制表符和换页符 [:punct:] 标点字符 [:cntrl:] 控制字符(禁止打印) [:print:] 可打印字符 使用时一般使用两个中括号,具体会在下面的例

文本处理工具之一grep命令详解

grep(Globel Search Regular Expression and Printing out the line)全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,是一个对行进行操作的搜索工作,它能使用正则表达式搜索文本,并把匹配的行打印出来.Unix的grep家族包括grep.egrep和fgrep. egrep表示扩展的grep,相比grep支持更多的元字符,"grep -E"相当于egrep.fgrep是fast grep,不支持元字符,但是搜索速度更快.

hbase shell基础和常用命令详解

HBase是Google Bigtable的开源实现,它利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理HBase中的海量数据,利用Zookeeper作为协同服务. 1. 简介 HBase是一个分布式的.面向列的开源数据库,源于google的一篇论文<bigtable:一个结构化数据的分布式存储系统>.HBase是Google Bigtable的开源实现,它利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理HBase

hbase shell基础和常用命令详解(转)

HBase shell的基本用法 hbase提供了一个shell的终端给用户交互.使用命令hbase shell进入命令界面.通过执行 help可以看到命令的帮助信息. 以网上的一个学生成绩表的例子来演示hbase的用法. name grad course math art Tom 5 97 87 Jim 4 89 80 这里grad对于表来说是一个只有它自己的列族,course对于表来说是一个有两个列的列族,这个列族由两个列组成math和art,当然我们可以根据我们的需要在course中建立更

shell --- grep 命令详解

一.grep  ---- "行过滤工具" grep ( global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来 )是一种强大的文本搜索工具,它能使用正则表达式搜索文本,查找包含某些字符串的行或符合某个模式(Pattern)的一类字符串的行,并把匹配的行打印出来.   grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则