grep命令的格式:

grep   [options]   PATTERN  [FILE]

其中:
1,pattern是用正则表达式书写的模式。
2,FILE是要查找的文件,可以是用空格间隔的多个文件,省略FILE时表示在标准输入中查找

常用参数:

-E :采用规则表示式去解释样式。
-c:只显示匹配行的次数。

-i:搜索时不区分大小写。
-n:输出匹配行的行号。
-v:输出不匹配的行(反向选择)。

-?:同时显示匹配行上下的?行,如:grep -2 pattern filename同时显示匹配行的上下2行。

-c,--count:只打印匹配的行数,不显示匹配的内容。
-f File,--file=File:从文件中提取模板。空文件中包含0个模板,所以什么都不匹配。
-i,--ignore-case:忽略大小写差别。
-q,--quiet:取消显示,只返回退出状态。0则表示找到了匹配的行。
-l,--files-with-matches:打印匹配模板的文件清单。
-L,--files-without-match:打印不匹配模板的文件清单。
-n,--line-number:在匹配的行前面打印行号。
-s,--silent:不显示关于不存在或者无法读取文件的错误信息。
-v,--revert-match:反检索,只显示不匹配的行。
-w,--word-regexp:如果被\<和\>引用,就把表达式做为一个单词搜索。
-V,--version:显示软件版本信息。

-b,--byte-offset:打印匹配行前面打印该行所在的块号码。

-h,--no-filename:当搜索多个文件时,不显示匹配文件名前缀。

-A NUM:同时输出匹配行的后NUM行。
-B NUM:同时输出匹配行的前NUM行。
-C NUM:同时输出匹配行的前,后各NUM行。

说明:
A:FILE可是使用shell的通配符的多个文件中查找PATTERN。
B:通常必须用单引号将整个模式PATTERN括起来。
C:grep命令不会对输入文件进行任何修改或影响,可以使用输出重定向将结果存文文件。

grep使用举例:
#在文件myfile中查找包含指定的字符串的行
#如果使用grep命令查找指定的字符串(不使用正则表达式),PATTERN可以不用单引号括起来
# grep osmond myfile

#在文件myfile1,myfile2,myfile3中查找指定的字符串的行
# grep 'osmond' myfile1 myfile2 myfile3

#在当前目录的所有文件中查找包含指定的字符串的行
# grep 'osmond' *

#在当前的目录的所有文件中查找包含字符*的行
# grep '*' *

#在文件myfile中查找包含字符$的行
#为了强制shell将\$(单反斜杠和美元符号)传递给grep命令,必须要使用\\(双反斜杠)
#\(单反斜杠)字符课通知grep命令将其后的(本例中的$)视最为原义字符而不是#元字符。
#如果使用fgrep命令,则可以不必使用反斜杠之类的转义符
# grep \\$  myfile
# grep '\$' myfile
# fgrep '$' myfile
# fgrep  $  myfile

#匹配myfile中所有的空行
# grep '^$' myfile

#显示myfile中第一个字符为字母的所有行
# grep '^[a-zA-Z]' myfile

#在文件myfile中查找首字母不是#的行(即过滤掉注释行)
# grep -v  '^#' myfile

#显示在myfile中至少有5个连续的小写字符的字符串的行
# grep '[a-z]\{5\}' myfile

#在文件myfile中查找包含日期格式(yyyy-mm-dd)的行
# grep '[12][0-9]\{3\}-[01][0-9]-[0-3][0-9]' myfile

#在文件myfile中查找与abc或xyz字符串匹配的所有行
# egrep 'abc|xyz' myfile

#如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.*)
#这些字符后面紧跟着另外一个es(\1),找到就显示该行
# grep 'w\(es)t.*\1' myfile
# egrep 'w(es)t.*\1' myfile

#通过管道过滤ls输出的内容,值显示以1开头的行
# ls -l | grep '^1'

#通过管道过滤ls输出的行,只显示可写的文件或目录的行
# ls -l | grep '[-d].w..w..w.'

#通过管道过滤ls输出的结果,只显示以~或-或.bak结尾的行
# ls | egrep '(~|-|.bak)$'

#显示awk目录下面所有.txt文件中的总字符字节
# grep '^.' *.txt | wc -c //不包括空行

#显示awk目录下面所有.txt文件中的总字符字节

# grep '^' *.txt | wc -c //包括空行

#显示awk目录下面所有.txt文件中的奇数行的总字符字节

#grep '^' *.txt | awk 'NR % 2 == 1'|wc -c

#显示awk目录下面所有.txt文件中的偶数行的总字符字节

#grep '^' *.txt | awk 'NR % 2 == 0'|wc -c

#把a.txt  b.txt中的奇数行写到文件c.txt文件中

#grep '^' a.txt b.txt |awk 'NR % 2 == 1' > c.txt

#把目录下面.txt中的奇数行写到文件tt.txt文件中

#grep '^' *.txt |awk 'NR % 2 == 1'>tt.txt

$ ls -l | grep '^a' 通过管道过滤ls -l输出的内容,只显示以a开头的行。 $ grep 'test' d* 显示所有以d开头的文件中包含test的行。 $ grep 'test' aa bb cc 显示在aa,bb,cc文件中匹配test的行。 $ grep '[a-z]\{5\}' aa 显示所有包含每个字符串至少有5个连续小写字符的字符串的行。 $ grep 'w\(es\)t.*\1' aa 如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.*),这些字符后面紧跟着另外一个es(\1),找到就显示该行。如果用egrep或grep -E,就不用"\"号进行转义,直接写成'w(es)t.*\1'就可以了。

下面的例子中我们假定在文件phone.txt中包含以下的文本,——其格式是姓加一个逗号,然后是名,然后是一个制表符,然后是电话号码:

  • Francis, John           5-3871
    Wong, Fred              4-4123 
    Jones, Thomas           1-4122 
    Salazar, Richard        5-2522

grep命令   描述

 
grep '\t5-...1' phone.txt   把所有电话号码以5开头以1结束的行打印出来,注意制表符是用\t表示的
grep '^S[^ ]* R' phone.txt   打印所有姓以S打头和名以R打头的行
grep '^[JW]' phone.txt   打印所有姓开头是J或者W的行
grep ', ....\t' phone.txt   打印所有姓是4个字符的行,注意制表符是用\t表示的
grep -v '^[JW]' phone.txt   打印所有不以J或者W开头的行
grep '^[M-Z]' phone.txt   打印所有姓的开头是M到Z之间任一字符的行
grep '^[M-Z].*[12]' phone.txt   打印所有姓的开头是M到Z之间任一字符,并且点号号码结尾是1或者2的行

wc命令 //统计指定文本文件的行数,字数,字符数

常用参数:
-c:统计输出的字节数
-l:统计输出行数
-L:统计输出最长一行的长度
-w:统计输出单词数

grep命令取出两个文件中不同的行

[root@bb-sns-nac-test02 ~]# cat f1.txt 
aaa 
bbb 
ccc 
ddd 
eee 
fff 
[root@bb-sns-nac-test02 ~]# cat f2.txt 
ddd 
eee 
fff 
ggg 
hhh 
取出相同的行: 
[root@bb-sns-nac-test02 ~]# grep -wf f1.txt f2.txt 
ddd 
eee 
fff

[root@bb-sns-nac-test02 ~]# grep -Fxf f1.txt f2.txt 
ddd 
eee 
fff

取出不同的行:

[root@bb-sns-nac-test02 ~]# grep -Fvxf <(grep -Fxf f1.txt f2.txt ) f1.txt f2.txt 
f1.txt:aaa 
f1.txt:bbb 
f1.txt:ccc 
f2.txt:ggg 
f2.txt:hhh 
f2.txt:

[root@bb-sns-nac-test02 ~]# grep -wvf  f1.txt f2.txt 
ggg 
hhh

[root@bb-sns-nac-test02 ~]# grep -wvf  f2.txt f1.txt 
aaa 
bbb 
ccc

补充重要知识点:

grep : g (globally) search for a re (regular expression ) and p (print ) the results.

◎语法: grep [options]  PATTERN  [FILE...]  
 grep用以在file内文中比对相对应的部分,或是当没有指定档案时,  
 由标准输入中去比对。 在预设的情况下,grep会将符合样式的那一行列出。

此外,还有两个程式是grep的变化型,egrep及fgrep。           
         其中egrep就等同於grep -E ,fgrep等同於grep -F 。

◎参数 
    1. -A NUM,--after-context=NUM  
               除了列出符合行之外,并且列出後NUM行。 
              
         ex:   $ grep -A 1 panda file  
               (从file中搜寻有panda样式的行,并显示该行的後1行) 
                                  
    2. -a或--text   
               grep原本是搜寻文字档,若拿二进位的档案作为搜寻的目标, 
               则会显示如下的讯息: Binary file 二进位档名 matches 然後结束。 
                   
               若加上-a参数则可将二进位档案视为文字档案搜寻, 
               相当於--binary-files=text这个参数。 
             
         ex:   (从二进位档案mv中去搜寻panda样式) 
               (错误!!!) 
               $ grep panda mv  
               Binary file mv matches   
               (这表示此档案有match之处,详见--binary-files=TYPE ) 
               $ 
               (正确!!!) 
               $ grep -a panda mv  
        
    3. -B NUM,--before-context=NUM 
               与 -A NUM 相对,但这此参数是显示除符合行之外 
               并显示在它之前的NUM行。         
              
         ex:   (从file中搜寻有panda样式的行,并显示该行的前1行) 
               $ grep -B 1 panda file

4. -C [NUM], -NUM, --context[=NUM]   
               列出符合行之外并列出上下各NUM行,预设值是2。 
              
         ex:   (列出file中除包含panda样式的行外并列出其上下2行) 
               (若要改变预设值,直接改变NUM即可) 
               $ grep -C[NUM]  panda file  
              
    5. -b, --byte-offset 
               列出样式之前的内文总共有多少byte .. 
               
          ex:  $ grep -b  panda file   
       显示结果类似於: 
         0:panda 
        66:pandahuang 
       123:panda03 
            
    6. --binary-files=TYPE 
               此参数TYPE预设为binary(二进位),若以普通方式搜寻,只有2种结果: 
                 1.若有符合的地方:显示Binary file 二进位档名 matches 
                 2.若没有符合的地方:什麽都没有显示。 
                    
               若TYPE为without-match,遇到此参数, 
               grep会认为此二进位档案没有包含任何搜寻样式,与-I 参数相同。 
                    
               若TPYE为text, grep会将此二进位档视为text档案,与-a 参数相同。 
         
     Warning: --binary-files=text 若输出为终端机,可能会产生一些不必要的输出。 
               
    7. -c, --count 
       不显示符合样式行,只显示符合的总行数。 
       若再加上-v,--invert-match,参数显示不符合的总行数。

8. -d ACTION, --directories=ACTION 
               若输入的档案是一个资料夹,使用ACTION去处理这个资料夹。 
       预设ACTION是read(读取),也就是说此资料夹会被视为一般的档案; 
       若ACTION是skip(略过),资料夹会被grep略过: 
       若ACTION是recurse(递),grep会去读取资料夹下所有的档案, 
       此相当於-r 参数。

9.  -E, --extended-regexp 
       采用规则表示式去解释样式。 
       
   10.  -e PATTERN, --regexp=PATTERN 
       把样式做为一个partern,通常用在避免partern用-开始。

11.  -f FILE, --file=FILE 
       事先将要搜寻的样式写入到一个档案,一行一个样式。 
       然後采用档案搜寻。 
       空的档案表示没有要搜寻的样式,因此也就不会有任何符合。 
        
   ex: (newfile为搜寻样式档) 
       $grep -f newfile file

12.  -G, --basic-regexp 
       将样式视为基本的规则表示式解释。(此为预设)

13.  -H, --with-filename 
       在每个符合样式行前加上符合的档案名称,若有路径会显示路径。 
        
   ex: (在file与testfile中搜寻panda样式)    
       $grep -H panda file ./testfile 
                file:panda 
                ./testfile:panda 
                $ 
      
   14.  -h, --no-filename   
               与-H参数相类似,但在输出时不显示路径。

15.  --help  
               产生简短的help讯息。

16.  -I 
               grep会强制认为此二进位档案没有包含任何搜寻样式, 
               与--binary-files=without-match参数相同。 
                    
           ex:  $ grep -I  panda mv

17.  -i, --ignore-case        
               忽略大小写,包含要搜寻的样式及被搜寻的档案。 
                
           ex:  $ grep -i panda mv 
                 
   18.  -L, --files-without-match  
               不显示平常一般的输出结果,反而显示出没有符合的档案名称。

19.  -l, --files-with-matches                
               不显示平常一般的输出结果,只显示符合的档案名称。

20.  --mmap                
               如果可能,使用mmap系统呼叫去读取输入,而不是预设的read系统呼叫。  
               在某些状况,--mmap 能产生较好的效能。 然而,--mmap  
               如果运作中档案缩短,或I/O 错误发生时, 
               可能造成未定义的行为(包含core dump),。 
                
   21.  -n, --line-number 
               在显示行前,标上行号。 
                
            ex:  $ grep -n  panda file   
                显示结果相似於下: 
                行号:符合行的内容

22.  -q, --quiet, --silent  
               不显示任何的一般输出。请参阅-s或--no-messages

23.  -r, --recursive 
       递地,读取每个资料夹下的所有档案,此相当於 -d recsuse 参数。

24.  -s, --no-messages 
       不显示关於不存在或无法读取的错误讯息。 
      
 小: 不像GNU grep,传统的grep不符合POSIX.2协定, 
       因为缺乏-q参数,且他的-s 参数表现像GNU grep的 -q 参数。 
       Shell Script倾向将传统的grep移植,避开-q及-s参数, 
       且将输出限制到/dev/null。 
     
POSIX: 定义UNIX及UNIX-like系统需要提供的功能。               
     
   25.  -V, --version 
  显示出grep的版本号到标准错误。 
  当您在回报有关grep的bugs时,grep版本号是必须要包含在内的。

26.  -v, --invert-match 
  显示除搜寻样式行之外的全部。 
                    
   27.  -w, --word-regexp 
          将搜寻样式视为一个字去搜寻,完全符合该"字"的行才会被列出。

28.  -x, --line-regexp 
  将搜寻样式视为一行去搜寻,完全符合该"行"的行才会被列出。

实例:
# ps -ef | grep in.telnetd 
root 19955 181 0 13:43:53 ? 0:00 in.telnetd

# more size.txt size文件的内容 
b124230 
b034325 
a081016 
m7187998 
m7282064 
a022021 
a061048 
m9324822 
b103303 
a013386 
b044525 
m8987131 
B081016 
M45678 
B103303 
BADc2345

# more size.txt | grep '[a-b]' 范围 ;如[A-Z]即A,B,C一直到Z都符合要求 
b124230 
b034325 
a081016 
a022021 
a061048 
b103303 
a013386 
b044525 
# more size.txt | grep '[a-b]'* 
b124230 
b034325 
a081016 
m7187998 
m7282064 
a022021 
a061048 
m9324822 
b103303 
a013386 
b044525 
m8987131 
B081016 
M45678 
B103303 
BADc2345

# more size.txt | grep '单个字符;如[A] 即A符合要求 
b124230 
b034325 
b103303 
b044525 
# more size.txt | grep '[bB]' 
b124230 
b034325 
b103303 
b044525 
B081016 
B103303 
BADc2345

# grep 'root' /etc/group 
root::0:root 
bin::2:root,bin,daemon 
sys::3:root,bin,sys,adm 
adm::4:root,adm,daemon 
uucp::5:root,uucp 
mail::6:root 
tty::7:root,tty,adm 
lp::8:root,lp,adm 
nuucp::9:root,nuucp 
daemon::12:root,daemon

# grep '^root' /etc/group 匹配正则表达式的开始行 
root::0:root

# grep 'uucp' /etc/group 
uucp::5:root,uucp 
nuucp::9:root,nuucp

# grep '/<uucp' /etc/group 
uucp::5:root,uucp

# grep 'root$' /etc/group 匹配正则表达式的结束行 
root::0:root 
mail::6:root

# more size.txt | grep -i 'b1..*3' -i :忽略大小写

b124230 
b103303 
B103303

# more size.txt | grep -iv 'b1..*3' -v :查找不包含匹配项的行

b034325 
a081016 
m7187998 
m7282064 
a022021 
a061048 
m9324822 
a013386 
b044525 
m8987131 
B081016 
M45678 
BADc2345

# more size.txt | grep -in 'b1..*3' 
1:b124230 
9:b103303 
15:B103303

# grep '$' /etc/init.d/nfs.server | wc -l 
128 
# grep '/$' /etc/init.d/nfs.server | wc –l 忽略正则表达式中特殊字符的原有含义

15 
# grep '/$' /etc/init.d/nfs.server 
case "$1" in 
>/tmp/sharetab.$$ 
[ "x$fstype" != xnfs ] && / 
echo "$path/t$res/t$fstype/t$opts/t$desc" / 
>>/tmp/sharetab.$$ 
/usr/bin/touch -r /etc/dfs/sharetab /tmp/sharetab.$$ 
/usr/bin/mv -f /tmp/sharetab.$$ /etc/dfs/sharetab 
if [ -f /etc/dfs/dfstab ] && /usr/bin/egrep -v '^[ ]*(#|$)' / 
if [ $startnfsd -eq 0 -a -f /etc/rmmount.conf ] && / 
if [ $startnfsd -ne 0 ]; then 
elif [ ! -n "$_INIT_RUN_LEVEL" ]; then 
while [ $wtime -gt 0 ]; do 
wtime=`expr $wtime - 1` 
if [ $wtime -eq 0 ]; then 
echo "Usage: $0 { start | stop }"

# more size.txt

the test file 
their are files 
The end

# grep 'the' size.txt 
the test file 
their are files

# grep '/<the' size.txt 
the test file 
their are files

# grep 'the/>' size.txt 
the test file

# grep '/<the/>' size.txt 
the test file

# grep '/<[Tt]he/>' size.txt 
the test file

grep的语法和用法相关推荐

  1. linux全局搜索是什么,linux之文本搜索工具(grep、egrep)用法

    linux操作系统的一项重要的法则就是一切皆文件,然而对于初学者来说最头疼的一件事就是linux庞大文件系统的管理,对于一些文本文件的查找所搜等无从下手,特别是对于习惯于windows操作系统的大家来 ...

  2. 装饰器的定义、语法糖用法及示例代码

    1. 装饰器的定义 就是给已有函数增加额外功能的函数,它本质上就是一个闭包函数. 装饰器的功能特点: 不修改已有函数的源代码 不修改已有函数的调用方式 给已有函数增加额外的功能 2. 装饰器的示例代码 ...

  3. C++ I/O语法及其用法

    C++ I/O语法及其用法 构造器 bad clear close eof fail fill flags flush gcount get getline good ignore open peek ...

  4. grep参数说明及常用用法

    grep参数说明及常用用法 查看文件内容 [kou@localhost ~]$ more size.txt b124230 b034325 a081016 m7187998 m7282064 a022 ...

  5. Linux基本命令 -- grep参数说明及常用用法

    Linux基本命令 -- grep参数说明及常用用法 趁着午休的时间把自己经常使用的一些grep命令整理一下. 方便以后查看. 后续会逐步把awk/sed/find等常用的命令理一理. 增强下记忆. ...

  6. linux命令:grep常用语法

    grep 的工作原理是将文件内容逐行读入,然后在每一行数据中搜索符合条件的内容并打印出来  grep 命令的使用格式如下: grep   "pattern"   file_name ...

  7. mysql all语法怎么用_MySQL UNION 与 UNION ALL 语法与用法

    MySQL UNION 语法 MySQL UNION 用于把来自多个 SELECT 语句的结果组合到一个结果集合中.语法为:SELECT column,... FROM table1 UNION [A ...

  8. 12个 Linux 中 grep 命令的超级用法实例

    作者丨tecmint linux.cn/article-2250-1.html 你是否遇到过需要在文件中查找一个特定的字符串或者样式,但是不知道从哪儿开始?那么,就请grep来帮你吧. grep是每个 ...

  9. mysql union 与 union all 语法及用法

    1.mysql union 语法 mysql union 用于把来自多个select 语句的结果组合到一个结果集合中.语法为: select column,......from table1union ...

最新文章

  1. JavaScript 拾碎[一] ECMAScript 简介
  2. jp摩根的人都在学python么_摩根大通已要求所有资管部门员工必须学习编程
  3. 【推荐】(SqlServer)不公开存储过程sp_Msforeachtable与sp_Msforeachdb详解
  4. 安装JDK后,未设置Path,也能执行java.exe的原因
  5. 真无线蓝牙耳机霸主之争:苹果AirPods和索尼WF-1000XM3怎么选?
  6. linux上启动git,linux上git操作与打jar包更新启动服务脚本
  7. to_char和to_date的用法详解
  8. 还有3天就要上班了,面试中灵魂拷问的问题送给你
  9. Apache下如何安装ssl证书?PHPWAMP如何开启SSL
  10. Mac触控板Magic Trackpad的常用手势
  11. input输入框历史记录清除
  12. python中fun函数求1+2…+n_功能:编写函数fun求1!+2!+3!+ …… +n!的和,在main函 数中由键盘输入n值,并输出运算结果。请编写fun 函数...
  13. 弘辽科技:淘宝新店扶持是人人享有的权益吗?
  14. Promise回调地狱的拯救者
  15. POI XWPFParagraph.getRuns分段混乱问题解决
  16. K210学习记录(3)——kmodel生成与使用
  17. 宏基 Iconia Tab A500 资料
  18. 为什么数据治理项目会失败?
  19. Halcon OCR字符识别
  20. python代码说明文档怎么写_Python写完代码怎么用

热门文章

  1. 苹果电脑可以装windows系统吗_iPhone 可以装 windows 了,想不想试试?
  2. MapGuide HTTP API
  3. 第5节 树形计算亚式期权价格
  4. 基于Java的雷电游戏设计(含源文件)
  5. 学生白嫖阿里云服务器方法
  6. iOS xxx is missing from working copy
  7. 解决“服务没有及时响应启动或控制请求”
  8. spoolsv解决方法
  9. 关于motionevent的使用
  10. JavaScript手风琴实现