文本过滤工具:grep

什么是grep

grep是一个命令行文本搜索工具,它的名称来源于"Global Regular Expression Print"(全局正则表达式打印)。它的主要功能是在文本文件中查找特定模式或字符串,并将匹配的行打印到终端或输出到文件。

基本用法

首先,让我们从grep命令的基本用法开始。

1. 搜索关键字

要在文件中搜索一个关键字,只需运行以下命令:

grep "keyword" filename

这将在filename文件中查找并显示包含"keyword"的所有行。

2. 区分大小写

默认情况下,grep是区分大小写的。如果要执行大小写不敏感的搜索,可以使用-i选项:

grep -i "keyword" filename

这将匹配"keyword"、“Keyword”、"KEYWORD"等。

3. 显示行号

有时候,你可能需要知道匹配行在文件中的行号。可以使用-n选项来显示行号:

grep -n "keyword" filename

这将在匹配行的前面显示行号。

4. 反向匹配

如果你想查找不包含关键字的行,可以使用-v选项:

grep -v "keyword" filename

这将显示不包含"keyword"的所有行。

5. 正则表达式

grep还支持正则表达式,这使得它非常强大。例如,要查找以数字开头的行,可以使用正则表达式:

grep "^[0-9]" filename

这将匹配以0到9之间的数字开头的行。

示例

现在,让我们探讨一些更高级的grep示例,这些示例将展示grep的真正威力。

1. 递归搜索

要在目录及其子目录中递归搜索,可以使用-r选项:

grep -r "keyword" directory/

这将搜索directory/下的所有文件,并显示包含"keyword"的行。

2. 按文件类型搜索

如果你只想在特定类型的文件中搜索,可以使用findgrep的组合。例如,要在所有的.txt文件中搜索关键字:

find . -type f -name "*.txt" -exec grep "keyword" {} \;

这将在当前目录及其子目录中查找所有.txt文件中包含"keyword"的行。

3. 统计匹配数量

要统计匹配行的数量而不显示匹配的内容,可以使用-c选项:

grep -c "keyword" filename

这将返回匹配"keyword"的行数。

4. 多个关键字

你可以使用正则表达式的"或"操作符|来搜索多个关键字。例如,要查找包含"apple"或"banana"的行:

grep "apple\|banana" filename

这将匹配包含任何一个关键字的行。

5. 输出匹配上下文

有时,查看匹配行的上下文很有帮助。可以使用-A-B选项来显示匹配行前后的内容。例如,要显示匹配行前后的2行:

grep -A 2 -B 2 "keyword" filename

这将显示匹配行前后各2行的内容。

日常使用

当涉及到Linux运维常见操作时,grep是一个不可或缺的工具,用于搜索、分析和筛选系统日志、配置文件和进程信息等。

1. 查找特定进程

使用ps命令列出当前正在运行的进程,然后使用grep来查找特定进程。例如,查找名为"nginx"的进程:

ps aux | grep nginx

这将显示包含"nginx"关键字的所有进程信息。

2. 搜索日志文件

查找日志文件中的特定错误或关键字,例如,查找Apache的访问日志中包含"404"的行:

grep "404" /var/log/apache2/access.log

这将显示包含"404"的所有访问日志行。

3. 统计日志中的错误

要统计日志文件中特定关键字的出现次数,可以使用grep结合wc命令。例如,统计错误日志文件中包含"error"的行数:

grep -c "error" /var/log/error.log

这将返回包含"error"的行数。

4. 搜索配置文件

查找特定配置文件中的配置项,例如,查找nginx配置文件中的虚拟主机配置:

grep -A 5 -B 5 "server {" /etc/nginx/nginx.conf

这将显示包含"server {"的行,并显示前后5行的内容。

5. 查找IP地址

从文本文件中提取IP地址,例如,从一个日志文件中提取所有不同的IP地址:

grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" access.log | sort -u

这将提取日志中的IP地址并显示不重复的地址列表。

6. 搜索正在监听的端口

查找系统上正在监听的端口,例如,查找所有监听在TCP端口80的进程:

netstat -tuln | grep ":80"

这将显示监听在TCP端口80的所有进程。

7. 检查服务状态

使用systemctl命令检查服务状态时,可以结合grep来查找特定服务的状态。例如,查找Apache服务的状态:

systemctl status apache2 | grep "Active"

这将显示Apache服务的活动状态信息。

8. 搜索压缩文件内容

在压缩文件中搜索内容,例如,从一个gzip压缩的日志文件中查找关键字:

zcat access.log.gz | grep "keyword"

这将解压缩日志文件并查找关键字。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/143309.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

数据分析回头看2——重复值检查/元素替换/异常值筛选

0、前言: 这部分内容是对Pandas的回顾,同时也是对Pandas处理异常数据的一些技巧的总结,不一定全面,只是自己在数据处理当中遇到的问题进行的总结。 1、当数据中有重复行的时候需要检测重复行: 方法:使用p…

RabbitMQ工作模式——Routing路由模式

1.Routing路由模式 Routing生产者代码 public class Producer_Routing {public static void main(String[] args) throws IOException, TimeoutException {//1.创建连接工厂ConnectionFactory factory new ConnectionFactory();//2.设置参数factory.setHost("172.16.98.…

Android T 禁止应用添加窗口的操作

序 什么情况下会出现我们需要禁止应用添加窗口的情况呢? 假如有一个应用的窗口,我们点开后是透明的或者会影响到系统的使用,那么我们就有必要对这个窗口操作一下 回顾我们在Android T WMS窗口相关流程中所讲的内容 禁止应用添加窗口的操作…

程序开发常用在线工具汇总

菜鸟工具# https://c.runoob.com/ 编码# ASCII码# https://www.habaijian.com/ 在线转换# https://www.107000.com/T-Ascii/http://www.ab126.com/goju/1711.html Base64# 在线转换# https://www.qqxiuzi.cn/bianma/base64.htmhttp://www.mxcz.net/tools/Unicode.aspx …

Diffusion Autoencoders: Toward a Meaningful and Decodable Representation

Diffusion Autoencoders: Toward a Meaningful and Decodable Representation (Paper reading) Konpat Preechakul, VISTEC, Thailand, CVPR22 Oral, Cited:117, Code, Paper 1. 前言 扩散概率模型 (DPM) 在图像生成方面取得了显着的质量,可与 GAN 相媲美。但是与…

引入嵌入和向量搜索时的三个错误

将非结构化数据表示为嵌入向量以及使用向量搜索进行基于嵌入的检索 (embedding-based retrieval - EBR) 比以往任何时候都更加流行。 嵌入到底是什么? Roy Keyes 在《嵌入的最短定义?》中对此进行了很好的解释。 嵌入是学习的转换,使数据更有…

React redux更新数据的诡异特征==》彻底掌握redux更新state机制的精髓

此文章是跟随我上一篇文章《Redux Toolkit中action派发但state值不更新的原因》写的。 本来一切都搞定了,此时我突发奇想: 如果让api服务端不发送包含x-pagination的header信息,web端会不会报错。因为按照web端 redux原有的逻辑:…

ubuntu与win之间共享文件夹

ubuntu上设置共享文件夹 第一步:点击【设置】或【虚拟机弹窗下面的【设置】选项】 第二步:进入【虚拟机设置】页面,点击【选项】如下图所示 第三步:启用共享文件:点击【总是启用】第四步:添加共享文件&…

【深度学习】RNN循环神经网络和LSTM深度学习模型

1. 循环神经网络 RNN( Recurrent Neural Network) 循环神经网络的一个核心是可以把前面的序列数据用到后面的结果预测里面。怎么样实现这一点呢。RNN 结构如下图所示。 前部序列的信息经处理后,作为输入信息传递到后部序列。 数学模型&…

机器学习第十三课--主成分分析PCA

一.高维数据 除了图片、文本数据,我们在实际工作中也会面临更多高维的数据。比如在评分卡模型构建过程中,我们通常会试着衍生出很多的特征,最后就得到上千维、甚至上完维特征;在广告点击率预测应用中,拥有几个亿特征也是常见的事…

使用U3D、pico开发VR(一)——将unity的场景在设备中呈现

最近srtp项目在赶进度,自己之前是在电脑端进行的开发。但是项目是VR端,因此需要重新学习,在此记录一下自己的学习经历。 首先,如何将unity的场景在自己的眼镜中进行呈现呢? 对此,我也找了很多教程&#xff…

Ubuntu 安装Kafka

在本指南中,我们将逐步演示如何在 Ubuntu 22.04 上安装 Apache Kafka。 在大数据中,数以百万计的数据源生成了大量的数据记录流,这些数据源包括社交媒体平台、企业系统、移动应用程序和物联网设备等。如此庞大的数据带来的主要挑战有两个方面…

软件架构的演化和维护

软件架构的演化和维护 定义 定义 顶不住了,刷题去了,不搞这个了,想吐。。。

GLTF编辑器也可以转换GLB模型

1、GLB模型介绍 GLB(GLTF Binary)是一种用于表示三维模型和场景的文件格式。GLTF是"GL Transmission Format"的缩写,是一种开放的、跨平台的标准,旨在在各种3D图形应用程序和引擎之间进行交换和共享。 GLB文件是GLTF文件…

目标检测:Edge Based Oriented Object Detection

论文作者:Jianghu Shen,Xiaojun Wu 作者单位:Harbin Institute of Technology Shenzhen 论文链接:http://arxiv.org/abs/2309.08265v1 内容简介: 1)方向:遥感领域中的目标检测技术 2)应用&…

云原生Kubernetes:K8S存储卷

目录 一、理论 1.存储卷 2.emptyDir 存储卷 3.hostPath卷 4.NFS共享存储 5.PVC 和 PV 6.静态创建PV 7.动态创建PV 二、实验 1.emptyDir 存储卷 2.hostPath卷 3.NFS共享存储 4.静态创建PV 5.动态创建PV 三、问题 1.生成pod一直pending 2.shoumount -e未显示共享…

编译vtk源码

vtk和opengl关系 VTK(Visualization Toolkit)和OpenGL(Open Graphics Library)都是用于图形可视化和渲染的重要工具,但它们在图形编程中的角色和关系略有不同。 OpenGL: OpenGL是一种开放的图形库和API&a…

十六,镜面IBL--预滤波环境贴图

又到了开心的公式时刻了。 先看看渲染方程 现在关注第二部分,镜面反射。 其中 这里很棘手,与输入wi和输出w0都有关系,所以,再近似 其中第一部分,就是预滤波环境贴图,形式上与前面的辐照度图很相似&#…

uni-app:实现页面效果2(canvas绘制,根据页面宽度调整元素位置)

效果 代码 <template><view><!-- 车搭配指示器-双显 --><view class"content_position"><view class"content"><view class"SN"><view class"SN_title">设备1</view><view class…

【考研数学】概率论与数理统计 —— 第三章 | 二维随机变量及其分布(3,二维随机变量函数的分布)

文章目录 七、二维随机变量函数的分布7.1 二维随机变量函数分布的基本情形 ( X , Y ) (X,Y) (X,Y) 为二维离散型随机变量 ( X , Y ) (X,Y) (X,Y) 为二维连续型随机变量 X X X 为离散型变量&#xff0c; Y Y Y 为连续型变量 7.2 常见二维随机变量的函数及其分布 Z min ⁡ { X ,…