Linux常用基础命令——grep
前言——
今天很迷茫,不知道写什么,想整理下linux的内容,却发现一个grep够完好久。。。。我整理得很用心,大家看完肯定大有裨益
欢迎转载,转载请注明来源
grep命令
grep是Global search Regular Expression and Print out the line的简称,即全面搜索正则表达式并把行打印出来。在linux中通过grep命令查找包含某种模式的文件。
grep [选项][模式][文件]
grep命令选项及其意义:
-c #只输出匹配行的数量
-i #搜索时忽略大小写
-h #查询多文件时不显示文件名
-l #只列出符合匹配的文件名,而不列出具体的匹配行
-n #列出所有的匹配行,并显示行号
-s #不显示不存在或无匹配文本的错误信息
-v #显示不包含匹配文本的所有行
grep命令的模式,可以是字符串,也可以是正则表达式。无论模式是什么,如果模式中包含空格,就需要在模式两边加上双引号,如果没有加双引号的话,空格后的单词容易被误认为是文件名(模式单引号也可以,不过我常用双引号)
新建一个Jane.txt的内容:
1.搜索Jane.txt中包含"Cake horse"的行:grep "Cake horse" Jane.txt
如果不用引号扩起来的话,会发生什么呢,让我们来看看 :grep Cake horse Jane.txt
此时由于Cake和horse之间有空格,所以horse会被认为文件名(这边提一下,如果要查的模式中没有空格,比如我查Cake,可以grep Cake Jane.txt, Cake两边完全可以不加任何符号,但是我还是觉得统一加上双引号比较好,这东西规范点不容易犯错。)
2.grep的多文件查询
此时再新建一个Cheng.txt的文本:
此时同时查询Jane.txt, Cheng.txt中包含“Cake”的行:grep "Cake" /root/Jane.txt /Cheng.txt(要用绝对路径,或者当前所在位置就是文本所在的目录)
3.-选项( -之前要有个空格和grep分离)
-c 选项
表示输出匹配字符串行的数量,grep不加任何选项时会打印出所有的匹配行,加了-c之后就只打印匹配行的数量了,不会再打印每一行的内容了。
-n 选项
输出匹配行的同时,外加显示出所在行号
-v 选项
输出不包含匹配串的所有行
注:这边用了两个选项,-v和-n同时使用。
-i 选项
默认情况下,grep对匹配串中每个字符的大小写都是区分的,如果要不区分大小写,可以加一个-i 选项
(这边为了测试,对Jane.txt的文本进行了一些小修改)
-h 选项
在多文件查询下,grep默认会打印文件名,如果不想显示文件名,可以加一个 -h 选项
-l 选项
在查询时,如果只想列出包含匹配串的文件名,而不打印匹配行,可以用-l 选项。
这边就只显示文件名,而不显示匹配行咯。
-s选项
grep在待搜索的文件不存在时会打印出提示信息,如果觉得提示信息太烦,可以加一个-s选项来不予以打印出来,挺人性化的。
4.grep与正则表达式
grep与正则表达式一起使用时,要用"(单引号)把模式括起来,不能用双引号或者不括起来
1. ‘^help’表示匹配以help开头的行
这是Jane.txt中的文本信息
2.'help$'表示匹配以help结尾的行
这是Jane.txt中的文本信息
3. ‘he.p’ .是用来匹配任何一个非换行符的字符。'he.p'可以匹配 'help', 'heap', 不能匹配 'hep', 'hellp'
4.'he*p',表示前面那个字符可以出现0次或者多次
5.[list]匹配字符集的一个字符。'[ha]elp',匹配help或者aelp
6.[n1-n2], 匹配字符范围内的一个字符。‘[a-z]elp’,匹配aelp,belp,celp,.......,zelp
7.[^list],匹配字符集list以外的任意一个字符,'[^chz]elp',表示不能匹配celp,help,zelp
8.'\<h' 匹配以h开头的单词
9.'p\>' 匹配以p结尾的单词