linux三剑客之grep

grep命令的介绍

grep(Globally search a Regular Expression and Print)是一种强大的文本搜索工具,它能使用特定模式匹配(包括正则表达式)搜索文本,并默认输出匹配行。Unix的grep家族包括grep、egrep和fgrep。grep是一个全局查找正则表达式并且打印结果行的命令。它的输入是一个文件或者是一个标准输入,它的输出一般是打印在屏幕上。

grep是如何工作:

grep命令在一个或者多个文件中查找某个字符模式。如果这个模式中包含空格,就必须用引号把它括起来。grep命令中,模式可以是一个被引号括起来的字符串,也可以是单个词,位于模式之后所有的单词都被视为文件名。grep将输出发送到屏幕,它不会对输入文件进行任何修改或变化。

格式:

grep [选项] 模式 [文件...]

 参数

  • -a 或 --text : 不要忽略二进制的数据。
  • -A<显示行数> 或 --after-context=<显示行数> : 除了显示符合范本样式的那一列之外,并显示该行之后的内容。
  • -b 或 --byte-offset : 在显示符合样式的那一行之前,标示出该行第一个字符的编号。
  • -B<显示行数> 或 --before-context=<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前的内容。
  • -c 或 --count : 计算符合样式的列数。
  • -C<显示行数> 或 --context=<显示行数>或-<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前后的内容。
  • -d <动作> 或 --directories=<动作> : 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。
  • -e<范本样式> 或 --regexp=<范本样式> : 指定字符串做为查找文件内容的样式。
  • -E 或 --extended-regexp : 将样式为延伸的普通表示法来使用。
  • -f<规则文件> 或 --file=<规则文件> : 指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。
  • -F 或 --fixed-regexp : 将样式视为固定字符串的列表。
  • -G 或 --basic-regexp : 将样式视为普通的表示法来使用。
  • -h 或 --no-filename : 在显示符合样式的那一行之前,不标示该行所属的文件名称。
  • -H 或 --with-filename : 在显示符合样式的那一行之前,表示该行所属的文件名称。
  • -i 或 --ignore-case : 忽略字符大小写的差别。
  • -l 或 --file-with-matches : 列出文件内容符合指定的样式的文件名称。
  • -L 或 --files-without-match : 列出文件内容不符合指定的样式的文件名称。
  • -n 或 --line-number : 在显示符合样式的那一行之前,标示出该行的列数编号
  • -o 或 --only-matching : 只显示匹配PATTERN 部分。
  • -q 或 --quiet或--silent : 不显示任何信息。
  • -r 或 --recursive : 此参数的效果和指定"-d recurse"参数相同。
  • -s 或 --no-messages : 不显示错误信息。
  • -v 或 --revert-match : 显示不包含匹配文本的所有行。
  • -V 或 --version : 显示版本信息。
  • -w 或 --word-regexp : 只显示全字符合的列。
  • -x --line-regexp : 只显示全列符合的列。
  • -y : 此参数的效果和指定"-i"参数相同。

 

小提示一:测试之前可以设置grep查找之后,输出的内容带有颜色,方便观察,设置如下:

方法一:设置环境变量 export GREP_OPTIONS="--color=auto"

              如果想要取消使用-n参数  export -n GREP_OPTIONS="--color=auto"

方法二:修改~/.bashrc 添加如下内容  alias grep='grep --color=auto',退出保存 ,让文件生效:source ~/.bashrc

 

小提示二:linux中的grep命令,单引号,双引号,和不加引号的区别

单引号:单引号是全引用,被单引号括起来的内容不管是常量还是变量都不会发生替换

双引号:双引号是部分引用,如果内容中有命令或者变量等,会先把命令解析出来,然后输出最终内容,被双引号括起来的内容常量还是常量,变量会发生替换,替换成变量内容。

不加引号:不会将空格的字符串视为一个整体输出,如果内容中有命令、变量等,会先把变量、命令解析出结果,然后在输出最终内容来,如果字符串中带有空格等特殊字符,则不能完整的输出,需要改加双引号,一般连续的字符串,数字,路径等可以用。

一般情况下只有常量用单引号括起来,如果有变量使用双引号括起来

 

grep的个别参数使用

测试文件如下:

1.显示grep的版本号,使用参数-V

 

2.找出文本中带有wo的行(不区分大小写),使用参数 -i

3.显示不包含wo的行 使用参数 -v

4.统计带有 Wo 的行的个数,参数 -c

5.打印带有hello的行,并且所在的行号,使用参数 -n

 

正则表达式元字符

元字符功能示例示例的匹配对象
^行首定位符/^test/匹配所有test开头的行
$行尾定位符/test$/匹配所有test结尾的行
.匹配除换行外的单个字符/t..t/匹配包含字符t、后跟两个任意字符、在跟字母t的行
*匹配零个或多个前边的字符 /test*/匹配test字符,并且最后一个t可以是0或者多个
[]匹配指定字符组内任一字符[Tt]est

匹配test或者Test

[^]匹配不在指定字符组内任一字符[^123]test匹配包含test,但是前边的字符不是123
x\{m\}连续m个xa\{5\}连续5个a
x\{m,\}至少m个xa\{5,\}至少有连续的5个a
x\{m,n\}至少m个x,最多n个xa\{5,10\}最少5个a,但是不超过10个a
(pattern)匹配pattern并获取这一匹配([0-9]).*\1匹配数字0-9,\1表示匹配与前面相同的数字

 

 

 

 

 

 

 

 

 

 

 

 

 

实例:

以下是测试过程中会用到的测试文件内容,(这里特地创建一个目录linux_test用来存放测试文件,测试文件名为grep.txt,文件内容是复制的/etc/passwd文件的前十条内容,如下显示):

 

问题一:.打印文件grep.txt文件中,包含正则表达式no的行

问题二:打印字母a开头的行,使用^行首定位符

问题三:打印login结尾的行,并显示所在行号,使用$行尾定位符

问题四:打印带有字符bin的行,并且在bin后面跟上任意一个字符

问题五:打印连续两个字母o字符所在行

问题六:打印至少一个字母o,o*表示匹配字母o,并且后面可以跟另个或者多个o

问题七:匹配字符o,并且匹配o后面所有的内容,.*匹配所有内容

问题八:匹配字符bin,并且前边的字符是/或者是s

问题九:匹配字符bin,并且前边的字符不是/,s

问题十:显示/proc/meminfo文件中不区分大小写,并且以s开头的

问题十一:显示/etc/passwd文件中以nologin结尾的行

问题十二:显示/etc/inittab中以#开头,且后面跟一个或多个空白字符,而后又跟了任意字符的行;

问题十三:显示/etc/inittab中包含了:一个数字:(即两个冒号中间一个数字)的行;

问题十四:显示/boot/grub/grub.conf文件中以一个或多个空白字符开头的行;

问题十五:显示/etc/inittab文件中以一个数字开头并以一个与开头数字相同的数字结尾的行;

问题十六:匹配以数字开头,后面跟一个小写字母,最后在匹配与前面相同的字母

(\2表示匹配前面第2个()里面的内容,()需要使用\进行转义)

问题十七:使用ifconfig eth0获得有关ip的信息,并且去获取10.0.0.110

这里结合cut使用,-d后边代表的是分隔符  -f后面的数字表示的是分割的列数

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值