grep使用


linux下通过grep来查找含有指定字符串的所有文件的方法。以查找Parameter这个字符串为例。

方法/步骤

1. grep用法

grep [options] PATTERN [FILE...]
grep [选项] 要查找的字符串 查找范围(查找路径)  
常用组合为:grep -rinl “要查找的字符串” 查找范围,rinl表示如下:
	-b 将可执行文件(binary)当作文本件(text)来搜索
	-c 仅显示找到的行数
	-r 是递归查找,查找所有文件包含子目录
	-i 忽略大小写
	-n 是显示行号
	-l 只列出匹配的文件名
	-E 将范本样式为延伸的普通表示法来使用,意味着使用能使用扩展正则表达式。
	-o 只输出文件中匹配到的部分
	-q 不显示任何信息
	-v 反向选择 —----仅列出没有“关键词”的行

2. grep -r递归查找

1、不带-r查找范围不包括子目录,只是指定目录下的所有文件;   
2、带-r时查找范围包括子目录。
   
    grep  -i "Parameter" /home/test/shell/*   
    grep  -ri "Parameter" /home/test/shell/*
   `*`: 表示当前目录所有文件,也可以是某个文件名  


3. grep -i忽略大小写

1、不带-i表示大小写敏感,表示要与查找字符串的大小写一致;
2、带-i表示忽略大小写,大写和小写都可以。

grep  -i "Parameter" /home/test/shell/*
grep  -ri "Parameter" /home/test/shell/*   

4. grep -n显示行数

显示查找字符串在文件的行数位置。
grep  -rn "Parameter" /home/test/shell/*    

5. grep -l只显示匹配的文件名。

grep  -ri "Parameter" /home/test/shell/*
grep  -ril "Parameter" /home/test/shell/*   

6 . grep -E使用正则表达式

ls | grep -E "[1-9]+"  #输出当前目录下所有文件名字包含1-9的数字的文件名

7 . grep -o只输出文件中匹配到的部分

echo this is a test line. | grep -o -E "[a-z]+\."  #输出前面是字母后面有.的单词
line.
echo this is a test line. | egrep -o "[a-z]+\."
line.
ls
	1224_offline_replay.log  1423_offline_replay.log  1642_offline_replay.log  1840_offline_replay.log  2380_offline_replay.log
	1241_offline_replay.log  1434_offline_replay.log  1692_offline_replay.log  2198_offline_replay.log  fvde
	1302_offline_replay.log  1507_offline_replay.log  1837_offline_replay.log  2212_offline_replay.log
ls | grep -o -E "[0-9]+\_"  #输出当前目录下所有文件名字的数字后有_的部分
	1224_
	1241_
	1302_
	1423_
	1434_
	1507_
	1642_
	1692_
	1837_
	1840_
	2198_
	2212_
	2380_

8 . grep -q静默输出,不显示任何信息

grep -q "test" filename #不会输出任何信息,如果命令运行成功返回0,失败则返回非0值。一般用于条件测试。

grep 显示前后几行的信息

grep 后面带上-A -B -C 参数可以多显示几行内容

grep -A 5 可以显示匹配内容以及后面的5行内容
grep -B 5 可以显示匹配内容以及前面的5行内容
grep -C 5 可以显示匹配内容以及前后面的5行内容

RE(正则表达式)

  \ 忽略正则表达式中特殊字符的原有含义 
  ^ 匹配正则表达式的开始行 
  $ 匹配正则表达式的结束行 
  \< 从匹配正则表达式的行开始 
  \> 到匹配正则表达式的行结束 
  [] 单个字符;如[A] 即A符合要求 
  [ - ] 范围 ;如[A-Z]即A,B,C一直到Z都符合要求 
  . 所有的单个字符 
  * 所有字符,长度可以为0   ### 举例

 # cat size.txt | grep [a-b] 范围 ;如[A-Z]即A,B,C一直到Z都符合要求 
   b124230 
   b034325 
   a061048 
   b103303 
   a013386 

 # cat size.txt |  grep 'b'
   b124230 
   b034325 
   b103303 

 # cat size.txt | grep '[bB]' 
   b124230 
   b034325 
   b103303 
   B081016 
   B103303 
   BADc2345 

 # 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 

Linux Bash中三个小于号 < < < 是什么意思

< < < 就是将后面的内容作为前面命令的标准输入

	while read line;do
	    grep "Holder" <<< $line
	    [[ $? -eq 0 ]] && rm $line  #如果grep成功则删除文件
	done <<EOF
	`ls`
	EOF