我们一起来学grep
文章目录
grep 介绍
- grep 系列是 Linux 中使用频率最高的文本查找命令。
- 主要功能在一个或者多个文件中查找特定模式的字符串。如果该行有匹配的字符串,则输出整个行的内容。如果没有匹配的内容,则不输出任何内容。grep命令
不改动源文件。 - Linux的grep家族包括
grep、egrep、fgrep、rgrep。 - grep 可以通过 -G、-E、-F 命令行选项来使用 egrep 和 fgrep 的功能。
grep: 在文件中全局查找指定的正则表达式,并打印所有包含该表达式的行egrep: 扩展的egrep,支持更多的正则表达式元字符fgrep: 固定grep(fixed grep),有时也被称作快速(fast grep),它按字面解释所有的字符
grep 命令格式
grep [选项] PATTERN filename filename ...
- 在每个 FILE 或是标准输入中查找 PATTERN。
- 默认的 PATTERN 是一个基本正则表达式(缩写为 BRE)。
grep 命令选项
| FILE 文件控制 | ||
|---|---|---|
-B |
--before-context=NUM |
打印过滤关键字和上面NUM行 |
-A |
--after-context=NUM |
打印过滤关键字和下面NUM行 |
-C |
--context=NUM |
打印过滤关键字和上下NUM行 |
-NUM |
等同 --context=NUM | |
--color[=WHEN] --colour[=WHEN] |
高亮颜色突出显示搜索的字符串。值’always’, ‘never’, or ‘auto’。 | |
-U |
--binary |
将文件作为二进制文件处理。仅有MS-DOS和MS-Windows支持该选项 |
-u |
--unix-byte-offsets |
报告UNIX风格的字节偏移。这个选项仅在同时使用-b选项的情况下才有效;仅有MS-DOS和MS-Windows支持该选项 |
| 与 PATTERN 正则表达式相关的选项 | ||
-E |
--extended-regexp |
PATTERN 是一个可扩展的正则表达式(缩写为 ERE) |
-F |
--fixed-strings |
PATTERN 是一组由断行符分隔的定长字符串 |
-G |
--basic-regexp |
PATTERN 是一个基本正则表达式(缩写为 BRE) |
-P |
--perl-regexp |
PATTERN 是一个 Perl 正则表达式 |
-e |
--regexp= PATTERN |
用 PATTERN 来进行匹配操作 |
-f |
--file=FILE |
从 FILE 中取得 PATTERN |
-i |
--ignore-case |
忽略大小写 |
-w |
--line-regexp |
强制 PATTERN 仅完全匹配字词 |
-x |
--extended-regexp |
强制 PATTERN 仅完全匹配一行 |
-z |
--null-data |
一个 0 字节的数据行,但不是空行 |
| 输出控制选项 | ||
-m |
--max-count=NUM |
在找到指定数量的匹配行后停止读文件 |
-b |
--byte-offset |
在显示符合样式的那一行之前,标示出该行第一个字符的编号 |
-n |
--line-number |
在显示符合样式的那一行之前,标示出该行的列数编号 |
--line-buffered |
刷新输出的每一行 | |
-H |
--with-filename |
在显示符合样式的那一行之前,表示该行所属的文件名称 |
-h |
--no-filename |
在显示符合样式的那一行之前,不标示该行所属的文件名称 |
--label=LABEL |
打印标签作为文件名的标准输入(主要用于管道处理) 例如:cat test |grep --label=test -H 123 | |
-o |
--only-matching |
仅输出匹配行的匹配部分 |
-q |
--quiet --silent |
抑制所有正常输出 |
--binary-files=TYPE |
假定二进制文件为TYPE类型文件TYPE可以为binary、text或without-match | |
-a |
--text |
等价于-binary-files=text |
-I |
--binary-files=without-match |
等价于–binary-files=without-match |
-d |
--directories=ACTION |
当grep的对象为目录时用,处理目录可以读取、递归或跳过 |
-D |
--devices=ACTION |
当grep的对象为处理设备、栈或套接字时必须用,处理对象可以读取或跳过 |
-r -R |
--recursive --directories=recurse |
相当于–directories=recurse 遍历目录 |
--include=FILE_PATTERN |
仅grep匹配的文件模式的文件 | |
--exclude=FILE_PATTERN |
跳过匹配的文件模式的文件和目录进行grep匹配 | |
--exclude-from=FILE |
跳过任一匹配文件模式的文件 | |
---exclude-dir=PATTERN |
跳过匹配的目录文件目录 | |
-L |
--files-without-match |
仅仅打印未匹配的文件的文件名 |
-l |
--files-with-matches |
仅仅打印匹配的文件的文件名 |
-c |
--count |
仅仅打印每个文件的匹配次数 |
-T |
--initial-tab |
将标签排队(标签即文件名) |
-Z |
--null |
打印文件名,文件名与匹配行中间没有空字节 -z与-Z的区别之一:当一个文件有多个匹配行时-z只打印一次文件名,而-Z每匹配一次打印一次文件名 |
| 杂项 | ||
-s |
--no-messages |
不显示错误信息 |
-v |
--invert-match |
打印不匹配的行 |
grep 实例
查找指定进程
ps -ef | grep kube-apiserver
root 6310 5764 0 14:34 pts/1 00:00:00 grep --color=auto kube-apiserver这个结果是grep进程本身,并非真正要找的进程
查找指定进程个数
grep -c统计的进程个数,会包含了grep本身的进程
ps -ef | grep docker -c
先使用
-v参数,排除grep自身的进程,再去过滤指定进程的个数
ps -ef | grep -v grep | grep docker -c
从文件中读取关键词进行搜索
先准备两个有内容的文件
cat <<EOF > test.txt
hello world
redhat
suse sle
centos
ubuntu
redhat
linux
EOF
cat <<EOF > test2.txt
linux
redhat
EOF
输出 test.txt 文件中含有从 test2.txt 文件中读取出的关键词的内容行
cat test.txt | grep -f test2.txt
显示行号(关键字在文本内的行数)的话,加上
-n参数即可
cat test.txt | grep -nf test2.txt
从多个文件中查找关键字
grep linux test.txt test2.txt
输出以u开头的行
grep "^u" test.txt
输出非u开头的行
grep -v "^u" test.txt
grep ^[^u] test.txt
输出以hat结尾的行
grep "hat$" test.txt
输出se或者ed字符的行
egrep "se|ed" test.txt
使用方括号表达式匹配括号内的任一字符
ps -ef | grep [do]cker
匹配一个范围内的任一字符
grep [a-z]c /etc/passwd
这里表示匹配一个小写字母的字符后面接一个字符 c 的字符串
结合 ^ 字符使用,表示取反
^放在方括号里面表示反向含义
^放在方括号外面则表示的是匹配行首
grep [^a-z]c /etc/passwd
这里表示匹配一个非小写字母的字符后接一个字符 c 的字符串
使用 {n.m} 区间表达式来匹配指定的次数
{n,m}表示匹配在其前面的字符 n 到 m次,{n,}表示至少匹配 n 次{,m}表示最多匹配 m 次{n}表示是精准匹配 n 次- 在 BRE 中,使用的是 {n,m} 的形式来实现相同的功能。
- n 与 m 的值必须介于 0 至 RE_DUP_MAX(包含这个值)之间,后者的最小值为255
egrep 5{2} /etc/passwd
匹配/etc/passwd文件中,一行内5连续出现了2次的行
使用 ( ) 保存已匹配的字符
- 使用 ( ) 会先匹配括号中的字符串,然后将匹配到的字符串保存在由正则表达式解析器预定义好的叫做寄存器的变量中,其编号从1到9,也就是说最多可以保存9组字符串,使用
\n可以取出所保存的字符串,其中n为1到9,分别对应9个寄存器的值。
ifconfig eth0 | egrep '([0-9]{,3}\.){3}[0-9]'
匹配一个行首字符和行尾字符相同的字符串
egrep '^(.).*\1$' test.txt
义好的叫做寄存器的变量中,其编号从1到9,也就是说最多可以保存9组字符串,使用 `\n` 可以取出所保存的字符串,其中 `n` 为`1到9`,分别`对应9个寄存器的值`。
```shell
ifconfig eth0 | egrep '([0-9]{,3}\.){3}[0-9]'
我们一起来学grep的更多相关文章
- sort命令的使用,结合uniq, awk等
这条命令的意思:lastb | awk -F " " '{print $3}' | sort | uniq -c | sort -k1,1nr > output.log 过滤 ...
- 菜鸟学Linux命令:grep配合ls等使用
linux grep命令 (global search regular expression(RE) and print out the line )是一种强大的文本搜索工具,它能使用正则表达式搜索文 ...
- 每天学点Linux-选取命令CUT和GREP
选取命令就是将一段数据经过分析后,取出我们所想要的.或者是经由分析关键词,取得我们所想要的那一行!一般来说,选取命令通常是针对一行一行的数据来进行分析的, 并不是整篇信息分析.cut cut命令可以将 ...
- 每天学点Linux命令之grep 和 wc命令
Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expr ession Print,表示全局正则表 ...
- 每天学点Linux命令之grep 和 wc命令 ---(6/25)
Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expression Print,表示全局正则表达 ...
- 每天学点Linux命令之grep 和 wc命令 --- !管道命令!
Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expr ession Print,表示全局正则表 ...
- 『学了就忘』Linux基础命令 — 31、grep命令和通配符
目录 1.grep命令介绍 2.find命令和grep命令的区别(重点) (1)find命令 (2)grep命令 3.通配符与正则表达式的区别 (1)通配符: (2)正则表达式: 1.grep命令介绍 ...
- 一步一步学ROP之linux_x64篇
一步一步学ROP之linux_x64篇 一.序 **ROP的全称为Return-oriented programming(返回导向编程),这是一种高级的内存攻击技术可以用来绕过现代操作系统的各种通用防 ...
- Linux查找命令:grep,awk,sed
grep grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具 ...
随机推荐
- SYCOJ2205超级百钱百鸡
题目-超级百钱百鸡 (shiyancang.cn) 百钱百鸡的加强版 百钱百鸡的话,因为是有范围,所以挨个挨个尝试即可,确定两个,即可确定第三个. 超级百钱百鸡,通过题目的描述,最后可以得到一个二元的 ...
- 彻彻底底地理解TCP三次握手和四次挥手的全部过程
三次握手 我们先提出一些问题,但是我们暂且不回答这些问题,下面我会尽我所能详尽地讲解TCP的三次握手过程,然后看完你可以在评论区留下你对问题的答案,我们可以一起探讨. 为什么要握手 为什么是三次而不是 ...
- 内核内存分配器SLAB和SLUB
内核分配器的功能 在操作系统管理的虚拟内存中,用于内存管理的最小单位是页,大多数传统的架构是4KB.由于进程每次申请分配4KB是不现实的,比如分配几个字节或几十个字节,这时需要中间机制来管理页面的微型 ...
- zip压缩,解压
//引用 System.IO.Compression.FileSystem.dll var basePath = AppDomain.CurrentDomain.BaseDirectory; Syst ...
- CVE-2021-26119 PHP Smarty 模版沙箱逃逸远程代码执行漏洞
0x00 漏洞介绍 smarty是一个基于PHP开发的PHP模板引擎.它提供了逻辑与外在内容的分离,简单的讲,目的就是要使用PHP程序员同美工分离,使用的程序员改变程序的逻辑内容不会影响到美工的页面设 ...
- APP 性能分析工作台——你的最佳桌面端性能分析助手
目前 MARS-App 性能分析工作台版本为开发者提供Fastbot桌面版的服务. 旨在帮助开发者们更快.更便捷地开启智能测试之旅,成倍提升稳定性测试的效率. 作者:字节跳动终端技术--王凯 背景 F ...
- python初学笔记之列表推导式
列表推导式(又称列表解析式)提供了一种简明扼要的方法来创建列表.注意:简而言之,就是把普通的多行for循环压缩成一行代码,这种压缩语法适用于列表.字典.集合等可迭代数据结构(iterables).创建 ...
- javascript 判断对像是否相等
在Javascript中相等运算包括"==","==="全等,两者不同之处,不必多数,本篇文章我们将来讲述如何判断两个对象是否相等? 你可能会认为,如果两个对象 ...
- 如何在pyqt中使用 QStyle 重绘 QSlider
前言 使用 qss 可以很方便地改变 QSlider 的样式,但是有些情况下 qss 无法满足我们的需求.比如下图所示样式: 如果直接使用 qss 将 handle 的内圆设置为透明背景,会看到 ha ...
- file类和fileinfo类的简单对比
File类:提供用于操作文件的静态方法. FileInfo类:提供操作文件的属性和实例方法. Directory类:提供用于操作目录的静态方法. DirectoryInfo类:提供用于操作目录的实例方 ...