grep Pocket Reference读记
1 简介
元字符 | 元字符名称 | 匹配 |
匹配单个字符的元字符 | ||
. | Dot | 任意一个字符 |
[...] | Character class | 方括号中列出的作意一个字符 |
[^...] | Negated character class | 任意一个方括号中没有列出的字符 |
\char | Escape character | 转义字符(The character after the slash literally.),用于查找元字符,比如要查找"$"符号,表达式为"\$" |
匹配一个位置的元字符 | ||
^ | Caret | 行首 |
$ | Dollar sign | 行尾 |
\< | Backslash less-than | 字首(Start of a word) |
\> | Backslash greater-than | 字尾(End of a word) |
量词 | ||
? | Question mark(extended regular expressions) | 0个或1个 |
* | Asterisk | 0个或多个 |
+ | Plus(extended regular expressions) | 1个或多个 |
{N} | Match exactly(extended regular expressions) | 匹配N次 |
{N,} | Match at least(extended regular expressions) | 至少匹配N次 |
{min,max} | Specified range(extended regular expressions) | 匹配min到max次 |
其它 | ||
| | Alternation(extended regular expressions) | Matches either expression given |
- | Dash | 指出一个范围,如a-z |
(...) | Parentheses(extended regular expressions) | Used to limit scope of alternation |
\1,\2, ... | Backreference | Matches text previously matched within parentheses (e.g., first set, second set, etc.) |
\b | Word boundary | Batches characters that typically mark the end of a word (e.g., space, period, etc.) |
\B | Backslash | 同'\\' |
\w | Word character | This is used to match any “word” character(i.e., any letter, number, and the underscore character) |
\W | Non-word character | This matches any character that isn’t used in words (i.e., not a letter, number, or underscore) |
\` | Start of buffer | Matches the start of a buffer sent to grep |
\' | End of buffer | Matches the end of a buffer sent to grep |
定义 | 匹配的内容 |
[:alpha:] | 字母,无论大小写 |
[:digit:] | 数字 |
[:alnum:] | 字母和数字 |
[:blank:] | Space or tab characters(空格或制表) |
[:xdigit:] | 十六进制字符,包括数字、A-F和a-f |
[:punct:] | Any punctuation symbol(标点) |
[:print:] | 可打印字符(非控制字符) |
[:space:] | Any whitespace character |
[:graph:] | Exclude whitespace characters |
[:upper:] | 大写字母 |
[:lower:] | 小写字母 |
[:cntrl:] | 控制字符 |
- Basic Regular Expressions (grep or grep -G)
- Extended Regular Expressions (egrep or grep -E)
- Fixed Strings (fgrep or grep -F)
- Perl-Style Regular Expressions (grep -P)
grep命令提供了很多选项用于控制匹配方式和输出方式,下面列出这些选项并做简短解释。
选项 | 示例 | 说明 |
Match Control | ||
-e pattern, --regexp=pattern | grep -e -style doc.txt | 把pattern当前正则表达式来解释。示例中如果不加-e,-style会被解释为命令选项。 |
-f file, --file=file | grep -f pattern.txt searchhere.txt | 从指定文件中读取正则表达式。The pattern file must list one pattern per line. |
-i, --ignore-case | grep -i 'help' me.txt | 忽略大小写。 |
-v, --invert-match | grep -v oranges filename | 返回那些不匹配的行。 |
-w, --word-regexp | grep -w 'xyz' filename | 匹配单词。示例等同于grep "\bxyz\b" filename |
-x, --line-regexp | grep -x 'Hello, world!' filename | 匹配整行。示例等同于grep '^Hello, world!$' filename |
General Output Control | ||
-c, --count | grep -c contact.html access.log | 输出匹配的行数,而不是匹配的行的内容。 |
--color[=WHEN], --colour[=WHEN] |
rep --color[=auto] regexp filename | 如果终端支持,grep将对输出内容着色,着色方式由环境变量GREP_COLORS定义。WHEN有3个合法值:never, always和auto。 |
-l, --files-with-matches | grep -l "ERROR:" *.log | 只输出含有匹配内容的文件名。使用lazy matching,找到第1个匹配的行以后停止在当前文件的匹配。 |
-L, --files-without-match | grep -L 'ERROR:' *.log | 只输出不含有匹配内容的文件名。使用lazy matching。 |
-m NUM, --max-count=NUM | grep -m 10 'ERROR:' *.log | 匹配NUM行以后停止在当前文件的匹配。 |
-o, --only-matching | grep -o pattern filename | 只输出匹配的内容而不是匹配的行。在二进制文件中查找某个串时很有用,因为如果输出行的话,输出内容中的二进制内容可能导致终端错误。 |
-q, --quiet, --silent | grep -q pattern filename | 不输出内容。可能通过检查grep命令的返回值来判断匹配的结果。0表示有内容匹配,1表示没有匹配到,2表示出错。 |
-s, --no-messages | grep -s pattern filename | 忽略由于文件不存在和权限原因导致的出错,不输出相应的错误信息。 |
Output Line Prefix Control | ||
-b, --byte-offset | grep -b pattern filename | 输出匹配内容在文件中的偏移量,从0开始。由于默认输出的是匹配的行,因此偏移量是行首在文件中的偏移量。和-o选项一起使用可以得到匹配内容的准确偏移量。这个选项在进行二进制文件分析时有用。 |
-H, --with-filename | grep -H pattern filename | 输出文件名。在多个文件中搜索时这是默认设置。要注意文件名是相对路径。 |
-h, --no-filename | grep -h pattern * | 不输出文件名。 |
--label=LABEL | gzip -cd file.gz | grep --label=LABEL pattern | 将来自标准输入的内容视为来自文件LABEL,因此输出时如果显示文件名则显示为LABEL。 |
-n, --line-number | grep -n pattern filename | 显示匹配的行在文件中的行号,行号从1开始。 |
-T, --initial-tab | grep -T pattern filename | 在grep产生的前缀和匹配的内容之间添加一个TAB进行分隔。 |
-u, --unix-byte-offsets | grep -u -b pattern filename | 使用Unix方式计算偏移量,这将忽略Windows上常用的CR字符。 |
-Z, --null | grep -Z pattern filename | 在输出的文件名后面打印ASCII NULL字符而不是通常紧跟在文件名后的字符(比如使用-l选项时文件名后面默认会打印一个换行符),这有利于在脚本里面对包含特定串的文件进行处理。 |
Context Line Control | ||
-A NUM, --after-context=NUM | grep -A 3 Copyright filename | 除匹配行外,打印出匹配行后面的NUM行,每一组之间用"--"分隔。 |
-B NUM, --before-context=NUM | grep -B 3 Copyright filename | 打印出匹配行前面的NUM行。 |
-C NUM, -NUM, --context=NUM | grep -C 3 Copyright filename | 打印出匹配行前后的NUM行,与同时使用-A和-B选项效果相同。 |
File and Directory Selection | ||
-a, --text | grep -a pattern filename | 与选项 --binary-files=text相同,把一个二进制文件当作为文本文件进行处理。 |
--binary-files=TYPE | grep --binary-files=TYPE pattern filename | TYPE可以是binary, without-match或者text。默认情况下grep如果处理一个二进制文件并且包含指定的表达式,只会显示类似“Binary file somefile.bin matches”的信息,不会显示匹配的行。这与--binary-files=binary的行为相同。如何TYPE为without-match,则grep直接跳过二进制文件,不对其做任何处理。 |
-D ACTION, --devices=ACTION | grep -D read 123-45-6789 /dev/hda1 | 如果输入文件是一个特殊文件如FIFO或套接字,-D选项指定grep如何对其进行操作。当ACTION为skip时,grep直接跳过相应文件;为read时,grep将从中读取内容就如同处理普通文件一样。 |
-d ACTION, --directories=ACTION | grep -d ACTION pattern path | 如果输入文件是一个目录,-d选项指定grep将如何对其进行操作。当ACTION为skip时,grep忽略相应文件;为read时,grep将其当作普通文件读取其内容;为recurse时,grep递归地处理其中的文件,与“-R”的行为相同。 |
--exclude=GLOB | grep --exclude=PATTERN path | 排除文件名匹配PATTERN的文件,可以使用SHELL通配符。 |
--exclude-from=FILE | grep --exclude-from=FILE path | 与--exclude效果相同,不同的是从文件FILE中读取PATTERN。文件中每行一个PATTERN。 |
--exclude-dir=DIR | grep --exclude-dir=DIR pattern path | 与--exclude效果相似,不同的是此选项作用于目录。 |
-I | grep -I pattern filename | 与 --binary-files=without-match效果相同。 |
--include=GLOB | grep --include=*.log pattern filename | 只处理文件名匹配GLOB的文件。 |
-R, -r, --recursive | grep -R pattern path grep -r pattern path |
递归处理指定路径中的所有文件。 |
Other Options | ||
--mmap | grep --mmap pattern filename | 使用mmap()替代read(),可以提高性能。但是如果在处理的过程中文件发生收缩(shrink),则会导致错误。 |
-V, --version | 显示grep的版本信息。 | |
-z, --null-data | grep -z pattern | 将输入的内容视为以ASCII NULL字符结尾,而不是换行符。与-Z选项,不过是作用于输入而不是输出。 |
grep -E具有和grep相同的命令行选项,只是增加了一些元字符以创建更复杂和精确的表达式。grep -E支持以下grep不支持的元字符:?, +, {n,m}, |, ().
元字符 | 意义 | 示例 |
? | 表示可选,即出现0次或1次 | egrep 'behaviou?r' filename 匹配behavior和behaviour |
+ | 表示出现1次或多次 | egrep 'pattern1+' filename 匹配pattern1, pattern11, pattern111.... |
{n,m} | 表示至少出现n次,最多出现m次 | egrep 'pattern{4}' filename 匹配patternnnn egrep 'pattern{4,}' filename n至少出现4次 egrep 'pattern{,4}' filename 这种形式是错误的,不提供”最多出现X次”的语义 egrep 'pattern{4,6}' filename n出现4次到6次 |
| | 表示“或” | egrep 'name1|name2' filename 匹配name1或者name2 |
( ) | 将模式串分组(group)以便backreferences, alternation或者仅仅是为了提高可读性。 加上括号可以使得模式更准确和易理解,括号中的模式通常称为子模式(subpattern)。 括号还用于限制"|"元字符作用的边界。 |
egrep 'patt(a|e)rn' filename 匹配pattarn或pattern |
fgrep也被称为fast grep,因为它不使用正则表达式。使用方式:
选项 | 示例 | 说明 |
-b | fgrep -b string_pattern filename | 输出匹配的行的行首在文件中的偏移量 |
-c | fgrep -c string_pattern filename | 输出匹配的行数 |
-e, -string | fgrep -e string_pattern1 -e string_pattern2 filename | 将-e后面的串当作patter,用于指定多个模式,或者用于以'-'字符开头的模式 |
-h | fgrep -h string_pattern filename | 在多个文件中搜索时,结果不输出文件名 |
-i | fgrep -i string_pattern filename | 不区分大小写 |
-l | fgrep -l string_pattern filename | 输出匹配的文件名,但不输出匹配的行 |
-n | fgrep -n string_pattern filename | 输出行号,从1开始 |
-v | fgrep -v string_pattern filename | 输出不匹配的行 |
grep -P使用Perl-Compatible Regular Expressions (PCRE) library来解析正则表达式,Perl正则表达式擅长处理文本,但是也非常复杂,容易出错。grep -P的行为与系统中libpcre库和Perl的版本有关。另外,也不是所有版本的grep都支持-P选项。Red Hat系的系统一般都支持,而Debian默认不支持,但是会提供一个pcregrep来替代grep -P。
grep的行为与系统的locale相关变量设置有关。通常情况下系统默认的locale设置就ok。
使用alternation和backreference会导致性能低下,尤其是backreference可能导致grep所需时间呈指数级增长。
grep Pocket Reference读记的更多相关文章
- 《阿里巴巴Java开发手册(正式版》读记
前几天,阿里巴巴发布了<阿里巴巴Java开发手册(正式版>,第一时间下载阅读了一番. 不同于一般大厂内部的代码规范,阿里巴巴的这本Java开发手册,可谓包罗万象,几乎日常Java开发中方方 ...
- (转) [it-ebooks]电子书列表
[it-ebooks]电子书列表 [2014]: Learning Objective-C by Developing iPhone Games || Leverage Xcode and Obj ...
- Oracle DBA 的常用Unix参考手册(一)
作为一名Oracle DBA,在所难免要接触Unix,但是Unix本身又是极其复杂的,想要深刻掌握同样很不容易.那么到底我们该怎么入手呢?Donald K Burleson 的<Unix for ...
- 3000本IT书籍下载地址
http://www.shouce.ren/post/d/id/112300 黑客攻防实战入门与提高.pdfhttp://www.shouce.ren/post/d/id/112299 黑 ...
- [转载]生活在 Emacs 中
Brian Bilbrey2002 年 8 月 20 日发布 教程简介 本教程讲什么? Emacs 是一个流行的无模式文本编辑器,有许多强大的功能.本教程将教您使用 Emacs 的基础知识.为了让您很 ...
- [Python] 学习资料汇总
Python是一种面向对象的解释性的计算机程序设计语言,也是一种功能强大且完善的通用型语言,已经有十多年的发展历史,成熟且稳定.Python 具有脚本语言中最丰富和强大的类库,足以支持绝大多数日常应用 ...
- 推荐一些不错的计算机书籍(php c mysql linux等等)
推荐一些不错的计算机书籍. # PHP<PHP程序设计>(第2版) --PHP语法和入门最好的书<PHP5权威编程> --PHP入门后升级书<深入PHP:面向对象.模 ...
- Head First Html and CSS学习笔记之CSS
第七章 CSS入门 元素的许多属性都可以设置样式,太多了,记不住,可以参考<CSS Pocket Reference>. 外部样式表,<link type = "text/ ...
- Linux系统信息查看命令大全
系统# uname -a # 查看内核/操作系统/CPU信息# head -n 1 /etc/issue # 查看操作系统版本# cat /proc/cpuinfo # 查看CPU信息# hostna ...
随机推荐
- Entity Framework Core 批处理语句
在Entity Framework Core (EF Core)有许多新的功能,最令人期待的功能之一就是批处理语句.那么批处理语句是什么呢?批处理语句意味着它不会为每个插入/更新/删除语句发送单独的请 ...
- css 的包含块 、负外边距,字体,文本行高
一.包含块 目的:确定元素的位置和相对大小(%) 1.正常文档流元素和浮动元素 ---- 父元素的 content-box 2.绝对定位元素 ---- 父元素的 padding-box 3.固定定位元 ...
- 初学 Python(十二)——高阶函数
初学 Python(十二)--高阶函数 初学 Python,主要整理一些学习到的知识点,这次是高阶函数. #-*- coding:utf-8 -*- ''''' 话说高阶函数: 能用函数作为参数的函数 ...
- 4. leetcode 461. Hamming Distance
The Hamming distance between two integers is the number of positions at which the corresponding bits ...
- hdu--1104--Remainder(简单的bfs)
Remainder Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total S ...
- 关于SQL语句条件值写中文查不到的问题
在使用jdbc链接MySQL执行SQL语句的时候,sql语句中的where条件,参数值带中文,则查询不到结果,而where条件,参数值都为数字或字母时可以正常查询, 原因是mysql的characte ...
- HPU--1141 蜗牛爬树
1141: 蜗牛爬树 [模拟] 时间限制: 1 Sec 内存限制: 128 MB提交: 377 解决: 60 统计 题目描述 阿门阿前一棵葡萄树,阿嫩阿嫩绿地刚发芽,蜗牛背著那重重的壳呀,一步一步地往 ...
- 线索化二叉树的构建与先序,中序遍历(C++版)
贴出学习C++数据结构线索化二叉树的过程, 方便和我一样的新手进行测试和学习 同时欢迎各位大神纠正. 不同与普通二叉树的地方会用背景色填充 //BinTreeNode_Thr.h enum Point ...
- [HNOI2013]游走 期望+高斯消元
纪念首道期望题(虽说绿豆蛙的归宿才是,但是我打的深搜总觉得不正规). 我们求出每条边的期望经过次数,然后排序,经过多的序号小,经过少的序号大,这样就可以保证最后的值最小. 对于每一条边的期望经过次数, ...
- Entity Framework Core 2.0 新特性
本文翻译来自:https://docs.microsoft.com/en-us/ef/core/what-is-new/index 一.模型级查询过滤器(Model-level query filte ...