linux中grep的使用

grep (缩写来自Globally search a Regular Expression and Print)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。Unix的grep家族包括grep、egrep和fgrep.
egrep和fgrep的命令只跟grep有很小不同。egrep和fgrep都是grep的扩展,支持更多的re元字符,fgrep就是fixed grep或fast grep,它们把所有的字母都看作单词,也就是说,正则表达式中的元字符表示回其自身的字面意义,不再特殊。linux使用GNU版本的grep。它功能更强,可以通过-G、-E、-F命令行选项来使用egrep和fgrep的功能。
grep的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到屏幕,不影响原文件内容。
grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作。
grep一般格式为:
grep [选项]基本正则表达式[文件],这里正则表达式可为字符串。
grep选项:
-c 只输出匹配的行数。

grep -c "aaa" a.txt

-i 不区分大小写

grep -i "AAA" a.txt

-n 显示匹配行及行号
注意其与-c的区别:
-c显示的是有几行匹配上了,而-n是哪行被匹配上了

grep -n "aaa" a.txt

-h 查询多文件时不显示文件名
-l 查询多文件时只输出包含匹配字符的文件名
-s 不显示不存在或者无匹配文本的错误信息
不显示查找文件名等不存在或者错误信息

grep -s "root" /etc/password

也可以用

grep "root" /etc/password >/dev/null 2>&1

2>&1 指将标准信息输出路径指定为错误信息输出路径(也就是都输出在一起)

grep -v "aaa" a.txt

精准匹配
在一个文件中,假如有48,484这样一个字符串的话,我们执行 grep “48” *.txt中,这俩个字符串都会被匹配上,但是我们只想精准匹配48,我们可以这么写:

grep '48\>' *.txt

使用正则表达式使模式匹配加入一些规则,因此可以在抽取信息中加入更多选择。使用
正则表达式时最好用单引号括起来,这样可以防止 g r e p中使用的专有模式与一些 s h e l l命令的
特殊方式相混淆。

模式范围
以48开头,以3或者4结尾,483,484

grep '48[34]' *.txt

匹配行首是p的

grep '^p' *.txt

不匹配行首p

grep '^[^p]' *.txt

使用-i选项可以不区分大小写,这里我们也可用[]

grep '[Ss]ept' *.txt

匹配头俩个是大写字母,中间俩个任意,并以c结尾

grep '[A-Z][A-Z]..c' *.txt

第一个字符为 5,后跟两个点,接着是 1 9 9,剩余两个数字是6或8。

grep '5..199[6,8]' *.txt

数字4至少重复出现俩次的所有行

grep '4\{2,\}' *.txt

有时要查询重复出现次数在一定范围内,比如数字或字母重复出现 2到6次,下例匹配数
字8重复出现2到6次,并以3结尾

grep '8\{2,6}3' *.txt

使用grep匹配 与 或者 或模式 -E
查找222 或者是333的方法

grep -E '222|333' *.txt

结合使用^和$可查询空行

grep '^$' *.txt

匹配特殊字符 例如$ . ’ ” [] * ^ | + ? 在这些字符前加\

grep '\.' *.txt

最多六个小写字符,后跟句点,接着是两个大写字符

grep '[^a-z]\{1,6/}\.[A-Z]\{1,2/}' *.txt

对一个字符串也可以使用grep

str="hello nihao"
echo $str |grep "hell0"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值