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 ...
随机推荐
- 初探JavaScript的截图实现
最近参与了网易炉石盒子的相关页面开发,在做卡组分享页(地址:炉石盒子卡组分享),有个需求:用户可以把这个卡组以图片的形式分享给好友.最初的的做法是使用服务器把该页面转换成图片,然后把图片地址返回给前端 ...
- css实现鼠标悬浮字体流光背景模糊效果
原文地址:→看过来 写在前面 有的时候感觉写点小玩意儿挺开心的,还能实践很多的小知识点,所以这次学着写了个有趣的鼠标悬浮模糊效果,只使用了css额. 效果图 源码地址→传送门 预览地址→传送门 小知识 ...
- taskctl实现自定义mysql存储过程作业类型调用
TASKCTL支持任意作业类型的扩展,但目前TASKCTL 4.1.3版本中并没有内置mysql存储过程的作业插件.通过介绍使TASKCTL支持调度mysql存储过程作业类型的步骤,一方面解决一些朋友 ...
- 小白浅论JAVA数组中“for加强版”
代码: /*String[] s=new String[]{"sdsfd","fgd","sdf"}; for(String a:s) Sy ...
- Web聊天应用中的表情插件
聊天应用中的表情插件 用于即时聊天应用的图片表情插件,具有展示表情.插入表情和表情编解码的功能 项目地址 看代码 看demo 原理介绍 web端的即时聊天中看到的表情,其实就是一张张表情图片,通过im ...
- Linux(8)查看服务器系统信息
查看服务器系统信息 ql@ql:~$ uname -n -r -p -o ql 4.2.0-35-generic x86_64 GNU/Linux ql@ql:~$ 查看linux系统类型和版本 ql ...
- 暑假集训D11总结
%dalao 今天某学长来讲一个极其高深的数据结构——线段树(woc哪里高深了),然而并没有时间整理笔记= =,所以明天在扔笔记咯= = 考试 今天考试,一看数据范围,woc暴力分给的真足,然后高高兴 ...
- Java集合框架Collections【List/Set】
1.基本介绍: 集合就是存放对象的,他比数组好的一点就是他一开始不清楚自己长度 容器一般是分为很多种的,很多的容器在一起然后进过断的抽象和抽取就成了一个体系,我们称之为集合框架 我们看体系首先是看顶层 ...
- css 实现三角形、圆形
.div { width:0px; height:0px; border:100px solid red; border-color:red red transparent transparent; ...
- 使用 Git 同步时出现ssl错误
错误提示 fatal: unable to access 'https://android.googlesource.com/platform/prebuilts/qemu-kernel/': gnu ...