博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux: grep
阅读量:6715 次
发布时间:2019-06-25

本文共 3954 字,大约阅读时间需要 13 分钟。

基本 grep 使用

[root@www ~]# grep [-acinv] [--color=auto] '搜寻字符串' filename选项与参数:-a :将 binary 文件以 text 文件的方式搜寻数据-c 只输出匹配行的计数。计算找到 '搜寻字符串' 的次数-h 查询多文件时不显示文件名。-i 不区分大小写(只适用于单字符)。所以大小写视为相同-l 查询多文件时只输出包含匹配字符的文件名。-n 显示匹配行及行号。-s 不显示不存在或无匹配文本的错误信息。-v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行!显示不包含匹配文本的所有行。--color=auto :可以将找到的关键词部分加上颜色的显示喔!将/etc/passwd,有出现 root 的行取出来# grep root /etc/passwd将/etc/passwd,有出现 root 的行取出来,同时显示这些行在/etc/passwd的行号# grep -n root /etc/passwd在关键字的显示方面,grep 可以使用 --color=auto 来将关键字部分使用颜色显示。 这可是个很不错的功能啊!但是如果每次使用 grep 都得要自行加上 --color=auto 又显的很麻烦~ 此时那个好用的 alias 就得来处理一下啦!你可以在 ~/.bashrc 内加上这行:『alias grep='grep --color=auto'』再以『 source ~/.bashrc 』来立即生效即可喔! 这样每次运行 grep 他都会自动帮你加上颜色显示啦将/etc/passwd,将没有出现 root 的行取出来# grep -v root /etc/passwd将/etc/passwd,将没有出现 root 和nologin的行取出来# grep -v root /etc/passwd | grep -v nologin用 dmesg 列出核心信息,再以 grep 找出内含 eth 那行,要将捉到的关键字显色,且加上行号来表示:[root@www ~]# dmesg | grep -n --color=auto 'eth'用 dmesg 列出核心信息,再以 grep 找出内含 eth 那行,在关键字所在行的前两行与后三行也一起捉出来显示[root@www ~]# dmesg | grep -n -A3 -B2 --color=auto 'eth'根据文件内容递归查找目录# grep ‘energywise’ *           #在当前目录搜索带'energywise'行的文件# grep -r ‘energywise’ *        #在当前目录及其子目录下搜索'energywise'行的文件# grep -l -r ‘energywise’ *     #在当前目录及其子目录下搜索'energywise'行的文件,但是不显示匹配的行,只显示匹配的文件这几个命令很使用,是查找文件的利器。

grep与正规表达式

字符类字符类的搜索:如果我想要搜寻 test 或 taste 这两个单字时,可以发现到,其实她们有共通的 't?st' 存在~这个时候,我可以这样来搜寻:[root@www ~]# grep -n 't[ae]st' regular_express.txt字符类的反向选择 [^] :如果想要搜索到有 oo 的行,但不想要 oo 前面有 g,如下[root@www ~]# grep -n '[^g]oo' regular_express.txt[root@www ~]# grep -n '[^a-z]oo' regular_express.txt[root@www ~]# grep -n '[0-9]' regular_express.txt行首与行尾字节 ^ $行首字符:如果我想要让 the 只在行首列出呢? 这个时候就得要使用定位字节了!我们可以这样做:[root@www ~]# grep -n '^the' regular_express.txt如果我不想要开头是英文字母,则可以是这样:[root@www ~]# grep -n '^[^a-zA-Z]' regular_express.txt^ 符号,在字符类符号(括号[])之内与之外是不同的! 在 [] 内代表『反向选择』,在 [] 之外则代表定位在行首的意义!那如果我想要找出来,行尾结束为小数点 (.) 的那一行:[root@www ~]# grep -n '\.$' regular_express.txt特别注意到,因为小数点具有其他意义(底下会介绍),所以必须要使用转义字符(\)来加以解除其特殊意义!找出空白行:[root@www ~]# grep -n '^$' regular_express.txt因为只有行首跟行尾 (^$),所以,这样就可以找出空白行啦!任意一个字节 . 与重复字节 *这两个符号在正则表达式的意义如下:. (小数点):代表『一定有一个任意字节』的意思;* (星号):代表『重复前一个字符, 0 到无穷多次』的意思,为组合形态假设我需要找出 g??d 的字串,亦即共有四个字节, 起头是 g 而结束是 d ,我可以这样做:[root@www ~]# grep -n 'g..d' regular_express.txt如果我想要字串开头与结尾都是 g,但是两个 g 之间仅能存在至少一个 o ,亦即是 gog, goog, gooog.... 等等,那该如何?[root@www ~]# grep -n 'goo*g' regular_express.txt如果我想要找出 g 开头与 g 结尾的行,当中的字符可有可无[root@www ~]# grep -n 'g.*g' regular_express.txt限定连续 RE 字符范围 {}我们可以利用 . 与 RE 字符及 * 来配置 0 个到无限多个重复字节, 那如果我想要限制一个范围区间内的重复字节数呢?举例来说,我想要找出两个到五个 o 的连续字串,该如何作?这时候就得要使用到限定范围的字符 {} 了。 但因为 { 与 } 的符号在 shell 是有特殊意义的,因此, 我们必须要使用字符   \ 来让他失去特殊意义才行。 至於 {} 的语法是这样的,假设我要找到两个 o 的字串,可以是:[root@www ~]# grep -n 'o\{2\}' regular_express.txt假设我们要找出 g 后面接 2 到 5 个 o ,然后再接一个 g 的字串,他会是这样:[root@www ~]# grep -n 'go\{2,5\}g' regular_express.txt如果我想要的是 2 个 o 以上的 goooo....g 呢?除了可以是 gooo*g ,也可以是:[root@www ~]# grep -n 'go\{2,\}g' regular_express.txt

扩展grep(grep -E 或者 egrep)

使用扩展grep的主要好处是增加了额外的正则表达式元字符集。grep 同时满足多个关键字和满足任意关键字① grep -E "word1|word2|word3"   file.txt   满足任意条件(word1、word2和word3之一)将匹配。② grep word1 file.txt | grep word2 |grep word3   必须同时满足三个条件(word1、word2和word3)才匹配。1、或操作grep -E '123|abc' filename  // 找出文件(filename)中包含123或者包含abc的行egrep '123|abc' filename    // 用egrep同样可以实现awk '/123|abc/' filename   // awk 的实现方式2、与操作grep pattern1 files | grep pattern2 //显示既匹配 pattern1 又匹配 pattern2 的行。3、其他操作grep -i pattern files   //不区分大小写地搜索。默认情况区分大小写,grep -l pattern files   //只列出匹配的文件名,grep -L pattern files   //列出不匹配的文件名,grep -w pattern files  //只匹配整个单词,而不是字符串的一部分(如匹配‘magic’,而不是‘magical’),grep -C number pattern files //匹配的上下文分别显示[number]行,打印所有包含NW或EA的行。如果不是使用egrep,而是grep,将不会有结果查出。# egrep 'NW|EA' testfile     对于标准grep,如果在扩展元字符前面加\,grep会自动启用扩展选项-E。#grep 'NW\|EA' testfile搜索所有包含0个或1个小数点字符的行。# egrep '2\.?[0-9]' testfile # grep -E '2\.?[0-9]' testfile# grep '2\.\?[0-9]' testfile 搜索一个或者多个连续的no的行。# egrep '(no)+' testfile# grep -E '(no)+' testfile# grep '\(no\)\+' testfile   #3个命令返回相同结果,

转载地址:http://nxrlo.baihongyu.com/

你可能感兴趣的文章
多行文本超出显示省略号
查看>>
转载~基于比较的排序算法的最优下界为什么是O(nlogn)
查看>>
在本机通过SQL远程操作数据库
查看>>
StringMVC返回字符串
查看>>
Windows完成端口网络模型
查看>>
CSS Hack整理
查看>>
leetcode 28. Implement strStr()
查看>>
nginx 服务器重启命令,关闭 (转)
查看>>
实用的正则表达式
查看>>
Hibernate中Criteria的完整用法
查看>>
LINUX创建用户的命令
查看>>
Spring MVC 学习总结(一)——MVC概要与环境配置 转载自【张果】博客
查看>>
POJ 2728 二分+最小生成树
查看>>
[LeetCode] Best Time to Buy and Sell Stock IV
查看>>
nuxt 2.0采坑计之 (引入静态文件css)
查看>>
I/O编程软件题(Java语言)
查看>>
时序逻辑、组合逻辑,我不再怕你了
查看>>
(三)mybatis之对Hibernate初了解
查看>>
git 分支( branch ) 的基本使用
查看>>
HDU 4334 Trouble
查看>>