概述:
grep最早由肯·汤普逊写成。原先是ed下的一个应用程序,名称来自于g/re/p(globally search a regular expression and print,以正则进行全域查找以及打印)。在ed下,输入g/re/p这个命令后,会将所有匹配‘定义样式’的字符串,以行为单位打印出,但是并不对原文件内容进行修改。grep命令在对一个或多个文件的内容进行基于模式搜索的情况下是非常有用的。模式可以是单个字符、多个字符、单个单词、或者是一个句子。当然最有用的还是正则。
例1 在文件中查找模式(单词)

 grep  match_pattern   file_name    #标记匹配颜色加 --color=auto 选项
2 grep "match_pattern"  file_name
例2 在多个文件中查找模式。
grep "match_pattern" file_1 file_2 file_3 ...
例3 使用-l参数列出包含指定模式的文件的文件名。

root@linux:~# grep -l root /etc/passwd /etc/shadow /etc/fstab 
例4 使用-n参数,在文件中查找指定模式并显示匹配行的行号,-c只计算匹配了多少行。

grep "text" -n file_name 
cat file_name | grep "text" -n
grep "text" -n file_1 file_2 #多个文件 使用正则表达式 -E 选项:
grep -E "[1-9]+"
egrep "[1-9]+" 只输出文件中匹配到的部分 -o 选项:
echo this is a test line. | grep -o -E "[a-z]+\."
line.
echo this is a test line. | egrep -o "[a-z]+\."
line.
例5 使用-v参数输出不包含指定模式的行

grep -v "match_pattern" file_name
#只在目录中所有的.php和.html文件中递归搜索字符 grep "main()" . -r --include *.{php,html}
#在搜索结果中排除所有README文件 grep "main()" . -r --exclude "README"
#在搜索结果中排除filelist文件列表里的文件 grep "main()" . -r --exclude-from filelist
例6 使用 ^ 符号输出所有以某指定模式开头的行
例7 使用 $ 符号输出所有以指定模式结尾的行。

 
 
例8 使用 -r 参数递归地查找特定模式
 
grep -r root /etc/ #上面的命令将会递归的在/etc目录中查找“root”单词
例9 使用 grep 查找文件中所有的空行

grep ^$ /etc/shadow  #由于/etc/shadow文件中没有空行,所以没有任何输出
例10 使用 -i 参数忽略大小写

例11 使用 -e 参数查找多个模式,#也可以使用-f选项来匹配多个样式,在样式文件中逐行写出需要匹配的字符。当然还可以使用-E通过扩展正则来表示

echo this is a text line | grep -e "is" -e "line" -o 
is
is
line
cat patfile
aaa
bbb
echo aaa bbb ccc ddd eee | grep -f patfile -o
echo this is a text line |grep -E "is|line" -o
-E {}前面要的内容如果是多个字符,要用()包裹起来,否则只会匹配{}前面相连的单一字符
例12 使用 -f 用文件指定待查找的模式
root@Linux:~# cat grep_file
^root
root
false$
root@Linux:~# grep -f grep_file /etc/passwd
例13 使用 -c 参数计算模式匹配到的数量
root@Linux:~# grep -cf file /etc/passwd  #cf参数的顺序不能颠倒,file里定义要匹配的模式
2
例14 输出匹配指定模式行的前或者后面N行
a)使用-B参数输出匹配行的前4行
b)使用-A参数输出匹配行的后4行
c)使用-C参数输出匹配行的前后各4行

例15 -q 静默输出,用于测试

例16 打印样式匹配所位于的字符或字节偏移
echo gun is not unix | grep -bo "not"
:not
#一行中字符串的字符便宜是从该行的第一个字符开始计算,起始值为0。选项 -b -o 一般总是配合使用。
 
 

grep的简单理解的更多相关文章

  1. git的简单理解及基础操作命令

    前端小白一枚,最近开始使用git,于是花了2天看了廖雪峰的git教程(偏实践,对于学习git的基础操作很有帮助哦),也在看<git版本控制管理>这本书(偏理论,内容完善,很不错),针对所学 ...

  2. 简单理解Struts2中拦截器与过滤器的区别及执行顺序

    简单理解Struts2中拦截器与过滤器的区别及执行顺序 当接收到一个httprequest , a) 当外部的httpservletrequest到来时 b) 初始到了servlet容器 传递给一个标 ...

  3. [转]简单理解Socket

    简单理解Socket 转自 http://www.cnblogs.com/dolphinX/p/3460545.html  题外话 前几天和朋友聊天,朋友问我怎么最近不写博客了,一个是因为最近在忙着公 ...

  4. Js 职责链模式 简单理解

    js 职责链模式 的简单理解.大叔的代码太高深了,不好理解. function Handler(s) { this.successor = s || null; this.handle = funct ...

  5. Deep learning:四十六(DropConnect简单理解)

    和maxout(maxout简单理解)一样,DropConnect也是在ICML2013上发表的,同样也是为了提高Deep Network的泛化能力的,两者都号称是对Dropout(Dropout简单 ...

  6. Deep learning:四十二(Denoise Autoencoder简单理解)

    前言: 当采用无监督的方法分层预训练深度网络的权值时,为了学习到较鲁棒的特征,可以在网络的可视层(即数据的输入层)引入随机噪声,这种方法称为Denoise Autoencoder(简称dAE),由Be ...

  7. 简单理解dropout

    dropout是CNN(卷积神经网络)中的一个trick,能防止过拟合. 关于dropout的详细内容,还是看论文原文好了: Hinton, G. E., et al. (2012). "I ...

  8. 我们为之奋斗过的C#-----C#的一个简单理解

    我们首先来简单叙述一下什么是.NET,以及C#的一个简单理解和他们俩的一个区别. 1 .NET概述 .NET是Microsoft.NET的简称,是基于Windows平台的一种技术.它包含了能在.NET ...

  9. 简单理解ECMAScript2015中的箭头函数新特性

    箭头函数(Arrow functions),是ECMAScript2015中新加的特性,它的产生,主要有以下两个原因:一是使得函数表达式(匿名函数)有更简洁的语法,二是它拥有词法作用域的this值,也 ...

随机推荐

  1. kuangbin 并查集

    A : Wireless Network  POJ - 2236 题意:并查集,可以有查询和修复操作 题解:并查集 #include<iostream> #include<cstdi ...

  2. 动态规划:HDU1248-钱币兑换问题

    解题心得: (青蛙跳台阶:有n阶台阶,青蛙可以一次跳一阶也可以一次跳两阶,问总共有多好中跳法) 1.之前把这个问题的思路弄错了,以为是递推,就像青蛙跳台阶,用斐波那契求解.但是用斐波那契肯定会超范围. ...

  3. Java面试——多线程面试题总结

    )两者都在等待对方所持有但是双方都不释放的锁,这时便会一直阻塞形成死锁. //存放两个资源等待被使用 public class Resource { public static Object obj1 ...

  4. 使用chrome开发程序,自动刷新开发目录

    npm i livereload -g 在开发目录下: livereload 安装这个插件:https://chrome.google.com/webstore/detail/livereload/j ...

  5. vue时时监听input输入框中 输入内容 写法

    Vue input 监听 使用 v-on:input="change" 实现即可 App.vue <template> <div> <md-field ...

  6. Go语言之并发编程(二)

    通道(channel) 单纯地将函数并发执行是没有意义的.函数与函数间需要交换数据才能体现并发执行函数的意义.虽然可以使用共享内存进行数据交换,但是共享内存在不同的goroutine中容易发生竞态问题 ...

  7. Java多线程-yield(),sleep()以及wait()的区别

    从操作系统的角度讲,os会维护一个ready queue(就绪的线程队列).并且在某一时刻cpu只为ready queue中位于队列头部的线程服务.但是当前正在被服务的线程可能觉得cpu的服务质量不够 ...

  8. loj2092 「ZJOI2016」大森林

    ref不是太懂-- #include <algorithm> #include <iostream> #include <cstring> #include < ...

  9. phpstorm将本地代码传递到远程服务器

    由于对vim不太熟悉,效率比较低,作为过渡阶段,采用本地编写代码,然后上传到开发机上,进行调试 前提是服务器开启了ftp服务:http://www.cnblogs.com/redirect/p/693 ...

  10. 【Palindrome Number】cpp

    题目: Determine whether an integer is a palindrome. Do this without extra space. click to show spoiler ...