grep用法解析(macos环境BSD shell)
    
  
      
      
     
    
      
        介绍
Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。
主要参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
   |  grep [options]
  [options]主要参数:
          -c:只输出匹配行的计数。
          -i:不区分大 小写(只适用于单字符)。 		 		-I:Ignore binary files.                  -h:查询多文件时不显示文件名。
          -l:查询多文件时只输出包含匹配字符的文件名。
          -n:显示匹配行及 行号。
          -s:不显示不存在或无匹配文本的错误信息。
          -v:显示不包含匹配文本的所有行。
 
  | 
 
testfile
1
   | wget -P ~/testfile/ "http://ou0y29lb2.bkt.clouddn.com/po.zip"
   | 
##全局设置
1 2
   | grepc="grep --color" cd $HOME/Documents/test_directory/pojo_test
   | 
-c : 只输出匹配行的计数
1
   | $grepc -c "\<condition\>" ./po/* -d skip
   | 
 

-i:不区分大 小写(只适用于单字符)。
1
   | $grepc -i "value" ./po/* -d skip
   | 
 

-h:查询多文件时不显示文件名。
1
   | $grepc -h -i "value" ./po/* -d skip
   | 

-l:查询多文件时只输出包含匹配字符的文件名。
1
   | $grepc -l -h -i "value" ./po/* -d skip
   | 
 

-n:显示匹配行及 行号
1
   | $grepc -n -i "value" ./po/* -d skip
   | 
 

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

照样报错 - - 不知道有啥用…
-v:显示不包含匹配文本的所有行。
1
   | grep -h -E -v -i "value|string|return|Criteria|{|}|=|addCriterion|super" ./po/* -d skip | grep [:space:]
  | 
 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
   | pattern正则表达式主要参数:
          \: 忽略正则表达式中特殊字符的原有含义。
          ^:匹配正则表达式的开始行。
          $: 匹配正则表达式的结束行。
          \<:从匹配正则表达 式的行开始。
          \>:到匹配正则表达式的行结束。
          [ ]:单个字符,如[A]即A符合要求 。
          [ - ]:范围,如[A-Z],即A、B、C一直到Z都符合要求 。
          . :所有的单个字符。
          * :有字符,长度可以为0。
   | 
 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
   |  $grepc -n -i "\\$" ./po/* -d skip
  $grepc -h -i "^sed" ./po/* -d skip
  $grepc -E -h -i "class.*{$" ./po/* -d skip
  $grepc -E -h -i "\<cond" ./po/* -d skip
  $grepc -E -h -i "tion\>" ./po/* -d skip
  $grepc -E -h -i "\<condition\>" ./po/* -d skip
  $grepc -E -h "[A-Z]{2,5}" ./po/* -d skip
  $grepc -E -h "[A-Z]{2,5}" ./po/* -d skip
  $grepc -E -h "\b.{5}\b" ./po/* -d skip
  $grepc -E -h "\b[[:alnum:]]{5}\b" ./po/* -d skip
 
  | 
 
grep命令使用简单实例
1 2
   |  $grepc -E -i -n "value" ./po/t* -d skip 
 
  | 
 
1 2 3
   | $grepc -E -n "value|one" ./po/test001.txt ./po/test002.txt     $grepc -E '\b[a-z]{5}\b' ./po/test001.txt     $grepc -E "'number (one)'.*\1" ./po/test001.txt    
   | 
 
grep命令使用复杂实例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
   | #假设您正在'./po/*'目录下搜索带字符 串'value'的文件: $grepc "value" ./po/*.txt #./po/test001.txt:What is your value? #./po/test002.txt:What is your value?
  #默认情况下,'grep'只搜索当前目录。如果 此目录下有许多子目录,’grep’会以如下形式列出: #grep: sound: Is a directory #这可能会使’grep’ 的输出难于阅读。这里有两种解决的办法: #明确要求搜索子目录: grep -r #或忽略子目录: grep -d skip #如果有很多 输出时,您可以通过管道将其转到’less’上阅读: $grepc "value" ./po/*  | less #这样,您就可以更方便地阅读
   | 
 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
   |  files="./po/* -r"
  $grepc -i obj ./po/* 
  $grepc -l obj $files 
  $grepc -L obj $files 
  $grepc -w obj $files 
  $grepc -C 2 obj $files 
  $grepc -E -i "address|value" $files 
  $grepc -ie address $files | $grepc -ie value 
  $grepc -n -ie address $files  
  $grepc -c -ie address $files  
 
  | 
 
可以使用国际模式匹配的类名:
1 2 3 4 5 6 7 8 9 10 11
   | [[:upper:]]   [A-Z]
  [[:lower:]]   [a-z]
  [[:digit:]]   [0-9]
  [[:alnum:]]   [0-9a-zA-Z]
  [[:space:]]   空格或tab
  [[:alpha:]]   [a-zA-Z]
   |