专题(一) grep命令

一. 知识点

1、命令

命令  说明  备注 
pattern控制    
 -E  将样式为延伸的正则表达式来使用。  
 -F 或 --fixed-regexp  将样式视为固定字符串的列表  
 -G  将样式视为普通的表示法来使用  
 -P    
 -e  指定字符串做为查找文件内容的样式(正则表达式)  
 -f  指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。  
 -i  忽略字符大小写的差别  
 -w  单词完全匹配,只显示全字符合的行  
 -x  整行完全匹配,只显示全列符合的行  
 -z    
 其它    
 -s   不显示错误信息  
 -v  显示不包含匹配文本的所有行  
 -V   显示版本信息  
 --help  显示所有用法  
 输出控制    
 -m,--max-count=NUM  只显示匹配的前 NUM 行  
 -b,--byte-offset  在显示符合样式的那一行之前,标示出该行第一个字符的编号  
 -n,--line-number  在显示符合样式的那一行之前,标示出该行的列数编号  
--line-buffered    
-H,--with-filename 在显示符合样式的那一行之前,表示该行所属的文件名称。  
-h,--no-filename 在显示符合样式的那一行之前,不标示该行所属的文件名称  
--label=LABEL

use LABEL as the standard input file name prefix

 
-o,--only-matching 只显示匹配PATTERN 部分  
-q,--quiet,--silent 不显示任何信息  
--binary-files=TYPE

assume that binary files are TYPE;
TYPE is 'binary', 'text', or 'without-match'

 
-a,--text 等同于 --binary-files=text  
-I 等同于 --binary-files=without-match  
-d,--directories=ACTION

ACTION 的值范围有:read\skip\recurse

当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。

 
-D,--devices=ACTION

ACTION 的值范围有:read\skip

当指定要查找的 devices/FIFOS/sockets 时,必须使 用这项参数,否则grep指令将回报信息并停止动作。

 
-r,--recursive

--directories=recurse

当指定要查找的是目录时,递归目录从里面文件中进行匹配查找

 
-R    
-L,--files-without-match 列出文件内容不符合指定的样式的文件名称。  
-l,--files-witch-match  列出文件内容符合指定的样式的文件名称  
-c,--count 打印出每个文件中 符合样式的列数  
-T,--initial-tab    
-Z    
上下文控制    
-B,--before-context=NUM 除了显示符合样式的那一行之外,并显示该行之前的内容。  
-A,--after-context=NUM 除了显示符合范本样式的那一列之外,并显示该行之后的内容。  
-C,--context=NUM 除了显示符合样式的那一行之外,并显示该行之前后的内容。  
-NUM    

2、用法

用法名称 命令 备注
模糊匹配 grep xxx  
精确匹配 grep -w xxx  
忽略大小写匹配 grep -i xxx  
正则表达式 grep -n 正则表达式 grep -n '^[a-z]':以a-z任何一个字符开头的内容
反向选择 grep -v  xxx

不包含

grep -v '^$'  不包含空行

 正则匹配  grep -e '^\s*#' $line

 判断 line 对应的字符串是否是 空格[0个或多个]# 开头的

即判断这行是否是注释行

     
     
     

 

二. 示例

1、从文件中匹配关键字符串

grep "<version>" /test.xml

或者

cat /test.xml |grep "<version>"

2、在输出的结果中匹配

ls /var/spool/cron |grep root

echo $data |grep bic

3、从多个文件中匹配内容

grep hello test*

查找前缀有test的文件 中含有  hello 的行

$ grep test test* #查找前缀有“test”的文件包含“test”字符串的文件  
testfile1:This a Linux testfile! #列出testfile1 文件中包含test字符的行  
testfile_2:This is a linux testfile! #列出testfile_2 文件中包含test字符的行  
testfile_2:Linux test #列出testfile_2 文件中包含test字符的行 

4、递归目录及其子目录下的所有文件查找匹配内容

grep -r update /etc/acpi 

 输出结果如下:

$ grep -r update /etc/acpi #以递归的方式查找“etc/acpi”  
#下包含“update”的文件  
/etc/acpi/ac.d/85-anacron.sh:# (Things like the slocate updatedb cause a lot of IO.)  
Rather than  
/etc/acpi/resume.d/85-anacron.sh:# (Things like the slocate updatedb cause a lot of  
IO.) Rather than  
/etc/acpi/events/thinkpad-cmos:action=/usr/sbin/thinkpad-keys--update 

 

参考:

https://www.runoob.com/linux/linux-comm-grep.html

posted @ 2022-02-13 17:16  夏之夜  阅读(394)  评论(0编辑  收藏  举报