专题(一) 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; |
|
-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