文本过滤工具: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. 按文件类型搜索
如果你只想在特定类型的文件中搜索,可以使用find
和grep
的组合。例如,要在所有的.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"
这将解压缩日志文件并查找关键字。
相关文章:
文本过滤工具:grep
什么是grep? grep是一个命令行文本搜索工具,它的名称来源于"Global Regular Expression Print"(全局正则表达式打印)。它的主要功能是在文本文件中查找特定模式或字符串,并将匹配的行打印到终端或输出到文件…...

【Linux】生产者和消费者模型
生产者和消费者概念基于BlockingQueue的生产者消费者模型全部代码 生产者和消费者概念 生产者消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题。 生产者和消费者彼此之间不直接通讯,而通过这个容器来通讯,所以生产者生产完数据之后不用等待…...

开发APP的费用是多少
开发一款APP的费用可以因多种因素而异,包括项目的规模、功能、复杂性、技术选择、地理位置等。北京是中国的大城市,APP开发的费用也会受到北京的物价水平和市场竞争的影响。以下是一些可以影响APP开发费用的因素,希望对大家有所帮助。北京木奇…...

start()方法源码分析
当我们创建好一个线程之后,可以调用.start()方法进行启动,start()方法的内部其实是调用本地的start0()方法, 其实Thread.java这个类中的方法在底层的Thread.c文件中都是一一对应的,在Thread.c中start0方法的底层调用了jvm.cpp文件…...
VUE_history模式下页面404错误
uniapp 的history 把#去掉了,但是当刷新页面的时候出现404错误 解决方案:需要服务端支持 如果 URL 匹配不到任何静态资源,则应该返回同一个 index.html 页面 Apache <IfModule mod_rewrite.c>RewriteEngine OnRewriteBase /RewriteRu…...

现代数据架构-湖仓一体
当前的数据架构已经从数据库、数据仓库,发展到了数据湖、湖仓一体架构,本篇文章从头梳理了一下数据行业发展的脉络。 上世纪,最早出现了关系型数据库,也就是DBMS,有商业的Oracle、 IBM的DB2、Sybase、Informix、 微软…...

最新AI写作系统ChatGPT源码/支持GPT4.0+GPT联网提问/支持ai绘画Midjourney+Prompt应用+MJ以图生图+思维导图生成
一、智能创作系统 SparkAi创作系统是基于国外很火的ChatGPT进行开发的Ai智能问答系统。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT?小编这里写一个详细图文教程吧&…...

Python机器学习实战-特征重要性分析方法(5):递归特征消除(附源码和实现效果)
实现功能 递归地删除特征并查看它如何影响模型性能。删除时会导致更大下降的特征更重要。 实现代码 from sklearn.ensemble import RandomForestClassifier from sklearn.feature_selection import RFE import pandas as pd from sklearn.datasets import load_breast_cance…...

如何快速走出网站沙盒期(关于优化百度SEO提升排名)
网站沙盒期是指新建立的网站在百度搜索引擎中无法获得好的排名,甚至被完全忽略的现象。这个现象往往发生在新建立的网站上,因为百度需要时间来评估网站的质量和内容。蘑菇号www.mooogu.cn 为了快速走出网站沙盒期,需要优化百度SEO。以下是5个…...

ATA-8000系列射频功率放大器——应用场景介绍
ATA-8000系列是一款射频功率放大器。其P1dB输出功率500W,饱和输出功率最大1000W。增益数控可调,一键保存设置,提供了方便简洁的操作选择,可与主流的信号发生器配套使用,实现射频信号的放大。 图:ATA-8000系…...

2009-2018年各省涉农贷款数据(wind)
2009-2018年各省涉农贷款数据(wind) 1、时间::209-2018年 2、范围:31省 3、来源:wind 4、指标:涉农贷款 指标解释 :在涉农贷款的分类上,按照城乡地域将涉农贷款分为农村贷款和城…...

window.print()打印及出现的问题
<template><transition name"el-zoom-in-center"><div class"JNPF-preview-main"><div class"JNPF-common-page-header"><el-page-header back"goBack" :content"打印通知书" /><div clas…...

Fedora Linux 39 Beta 预估 10 月底发布正式版
Fedora 39 Beta 镜像于今天发布,用户可以根据自己的使用偏好,下载 KDE Plasma,Xfce 和 Cinnamon 等不同桌面环境版本,正式版预估将于 10 月底发布 Fedora 39 Beta 版本主要更新了 DNF 软件包管理器,并优化了 Anaconda …...

【zookeeper】基于Linux环境安装zookeeper集群
前提,需要有几台linux机器,我们可以准备好诸如finalshell来连接linux并且上传文件; 其次Linux需要安装上ssh,并且在/etc/hosts文件中写好其他几台机器的名字和Ip 127.0.0.1 localhost localhost.localdomain localhost4 localh…...

什么是IoT数字孪生?
数字孪生是资产或系统的实时虚拟模型,它使用来自连接的物联网传感器的数据来创建数字表示。数字孪生允许您从任何地方实时监控设备、资产或流程。数字孪生用于多种目的,例如分析性能、监控问题或在实施之前运行测试。从物联网数字孪生中获得的见解使用户…...

俄罗斯四大平台速卖通、Joom、Ozon 和 UMKA中国卖家如何脱颖而出!
随着全球化的不断推进,越来越多的中国卖家将目光投向了俄罗斯这个广阔的市场。在众多的跨境电商平台中,速卖通、Joom、Ozon 和 UMKA 无疑是最受关注的四个平台。本文将从卖家的角度,详细分析这四大平台的特点和优势,帮助找到最…...
destoon 调用第三方api接口
调用企查查企业工商信息接口为例: 在 \api\extend.func.php 文件下 注意:有注释内容可能接口无法访问 function select_list($k){$query_data array(key>,keyword>$k);$url "https://api.qichacha.com/ECIV4/GetBasicDetailsByName?&q…...

js中的类型转换
原文地址 JavaScript 中有两种类型转换:隐式类型转换(强制类型转换)和显式类型转换。类型转换是将一个数据类型的值转换为另一个数据类型的值的过程。 隐式类型转换(强制类型转换): 隐式类型转换是 Java…...

Oracle物化视图(Materialized View)
与Oracle普通视图仅存储查询定义不同,物化视图(Materialized View)会将查询结果"物化"并保存下来,这意味着物化视图会消耗存储空间,物化的数据需要一定的刷新策略才能和基表同步,在使用和管理上比…...

Spring 学习(九)整合 Mybatis
1. 整合 Mybatis 步骤 导入相关 jar 包 <dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><dependency>…...

Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...

使用 SymPy 进行向量和矩阵的高级操作
在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...

面向无人机海岸带生态系统监测的语义分割基准数据集
描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...
动态 Web 开发技术入门篇
一、HTTP 协议核心 1.1 HTTP 基础 协议全称 :HyperText Transfer Protocol(超文本传输协议) 默认端口 :HTTP 使用 80 端口,HTTPS 使用 443 端口。 请求方法 : GET :用于获取资源,…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...
【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制
使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下,限制某个 IP 的访问频率是非常重要的,可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案,使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...
scikit-learn机器学习
# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...

打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用
一、方案背景 在现代生产与生活场景中,如工厂高危作业区、医院手术室、公共场景等,人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式,存在效率低、覆盖面不足、判断主观性强等问题,难以满足对人员打手机行为精…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...