grep 与条件_[Linux][工具] Linux文本批量处理工具系列(2)grep

b279fd564dfa2a621ee300061762ac7e.png

这一篇写Linux 里面的查找工具 —— grep

grep 的全称是 Global Regular Expression Print,全局正则表达式打印,顾名思义,它可以在指定文档里搜索普通的字符串,也可以匹配正则表达式,然后将匹配后的结果打印在屏幕上。(注:下文的pattern指的是你交给grep 进行匹配的字符串或正则表达式)

当然它也可以在多个文件中,或者指定的路径下对所有的文档同时进行检索,这就需要设定一些参数了。

需要学习正则表达式的可以看我的另一篇笔记:

123456:[Python] Python 的正则表达式

1.grep 的参数

关于你输入的pattern 和匹配方式

-E, --extended-regexp 输入的pattern为一个正则表达式,也可以用egrep 来代替它。如果你想在不使用 -E 或者 egrep 的情况下使用,但是需要添加转义符。

-F, --fixed-strings 需要匹配的pattern 为固定的字符串

-G, --basic-regexp pattern 为一个普通的正则表达式

-P, --perl-regexp 输入的 pattern 为一个perl语言下的正则表达式

-e, --regexp=PATTERN pattern 在这里作为一个条件输入,如 grep -e ‘1’file 会输出文件中所有的包含1的字符串

-f, --file=FILE pattern 来自于指定文件

-i, --ignore-case 忽略大小写 grep -i ‘a’file 输出的结果包括 a 和 A

-w, --word-regexp 完整匹配单词,只有pattern = 整个单词的时候才能够匹配,grep -w “function”file 只能匹配 function 而不会匹配 functional

-x, --line-regexp 完整匹配一整行,和 -w 类似,不过要求一整行的内容都和pattern一样

-z, --null-data 匹配数据时,以“0”作为结尾,而非换行符

关于输出:

-m, --max-count=NUM 限制最大匹配数量 举个例子: grep -m 2 'str' file 最多在文件里匹配两次 str

-b, --byte-offset 在输出的字符串前标注字符串的第一个字符的位置

-n, --line-number 在输出的行前面标注行编号

-H, --with-filename 输出匹配项时同时打印对应的文件名

-h, --no-filename 输出时不输出文件名

-o, --only-matching 只显示匹配pattern 的部分

-q, --quiet, --silent 不输出

-a, --text 不会忽略二进制内容

-I 忽略二进制内容

-d, --directories 输入动作,决定对某个目录的动作,当你的输入是目录而非文件时,必须输入 -d,动作包括: 'read', 'recurse', or 'skip' (分别为 明确读取某个指定目录;递归读取子目录;和忽略子目录)

-D, --devices=ACTION 处理设备、栈或套接字时必用,但没有递归,只有read 和 skip

-r, --recursive 等于 -d recurse

-R, --dereference-recursive 依旧是等于-d read ,但在同时解析符号链接

-L, --files-without-match 只输出不包含匹配项的文件的名称

-l, --files-with-matches 只输出包含匹配项文件的文件名

-c, --count 只打印每个文件中匹配的行数

-T, --initial-tab 对齐制表符

-Z, --null 在输出文件名后不再输出(我没用过这个...没太明白啥意思)

如果你想看看匹配项的上下文:

-B, --before-context=NUM 除了匹配到的行外,还将输出匹配到行的前(?)行

-A, --after-context=NUM 除了匹配到的行外,还将输出匹配到行的后(?)行

-C, --context=NUM 同时输出上下文(?)行

-NUM = -C or --context=NUM

-U, --binary 不会删除其他系统下的CR换行符(MSDOS/Windows 的换行符不是n 而是 r)

-u, --unix-byte-offsets 如果内容里不包含CR,那么报告它的位置

其他:

-s, --no-messages 不报错

-v, --invert-match 反选,选择那些没有pattern的行

-V, --version 版本信息

--help 帮助

2.Pattern部分

这一部分主要是正则表达式的写法和多个pattern的同时设定,这部分我只谈grep 一些比较特殊的正则表达式用法,基本的我就不再赘述了。

匹配次数

{m,n} 匹配 m-n 次前面的pattern

? = {0,1} 匹配0-1次

* = {0,} 匹配pattern 任意次数(即使没有也没关系)

+ = {1,} 匹配pattern 一到多次 (至少出现一次)

多pattern 匹配

(string) 将其中的string作为一个整体,进行分组

| 用于多组pattern 同时进行匹配,举例:抓取日志文件中的错误信息:

grep 'warning|error' *.log

或者可以用grep -e warning -e error *.log 直接给出多个pattern

pattern 的位置

^ 锚定行首

$ 锚定行尾

b(pattern)或< 锚定单词的词首。如"blike"不会匹配alike,但是会匹配liker

(pattern)b或> 锚定单词的词尾。如"likeb"不会匹配liker,只会匹配alike

B 与b作用相反

写在后面:

这里面只介绍了参数、用法和很少的几个例子,我打算写完awk之后将一些平时处理数据的命令行统一给出,再讨论一下什么时候我会用命令行,什么时候我会去写一些简单的python脚本实现功能。

最近沉迷下棋....我会尽量更新的....

参考:

linux中grep命令的用法 - flyor - 博客园

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值