【Linux】文本处理三剑客:grep、sed 和 awk

news2024/12/13 2:38:07

人不走空

                                                                      

      🌈个人主页:人不走空      

💖系列专栏:算法专题

⏰诗词歌赋:斯是陋室,惟吾德馨

目录

      🌈个人主页:人不走空      

💖系列专栏:算法专题

⏰诗词歌赋:斯是陋室,惟吾德馨

1. grep - 快速查找

基本用法

示例

2. sed - 流编辑器

基本用法

示例

3. awk - 强大的文本处理语言

基本用法

示例

如何高效组合使用它们

示例:日志分析

总结

作者其他作品:


 

在日常的开发、运维、数据分析等工作中,我们经常需要处理大量的文本数据。无论是日志分析、配置文件修改,还是数据提取与格式化,命令行工具 grepsedawk 都是不可或缺的得力助手。它们被戏称为“文本处理三剑客”,为我们提供了高效且灵活的方式来处理和操作文本数据。

1. grep - 快速查找

grep 是 Linux 系统中最常用的文本查找工具,常用于在文件中搜索指定的字符串或正则表达式。它的名字来源于 "Global Regular Expression Print"。

基本用法

grep 'pattern' file.txt         # 查找文件中包含 'pattern' 的行
grep -i 'pattern' file.txt      # 忽略大小写,查找 'pattern'
grep -r 'pattern' /path/to/dir  # 递归查找指定目录下所有文件
grep -v 'pattern' file.txt      # 查找不包含 'pattern' 的行
grep -l 'pattern' *.txt         # 显示包含 'pattern' 的文件名

示例

假设我们有一个日志文件 logs.txt,想查找所有包含错误信息的行:

grep 'error' logs.txt

这个命令会返回所有包含 error 字符串的行。如果我们想查找所有大小写不敏感的错误信息,可以加上 -i 选项:

grep -i 'error' logs.txt

2. sed - 流编辑器

sed(Stream Editor)是一个功能强大的文本流编辑工具,主要用于文本替换、删除、插入、转换等任务。与 grep 主要用于查找不同,sed 允许我们直接修改文本内容。

基本用法

sed 's/old/new/' file.txt        # 替换文件中的第一个 'old' 为 'new'
sed -i 's/old/new/' file.txt     # 直接修改文件,将 'old' 替换为 'new'
sed '2d' file.txt                # 删除第 2 行
sed '1,3d' file.txt              # 删除第 1 到第 3 行
sed 's/^\s*//g' file.txt         # 删除每行开头的空格

示例

假设我们要将文件 config.txt 中所有的 localhost 替换为 127.0.0.1

sed -i 's/localhost/127.0.0.1/g' config.txt

如果想删除文件的第一行,可以使用:

sed '1d' file.txt

而如果想删除每行开头的多余空格,则可以使用:

sed 's/^\s*//g' file.txt

3. awk - 强大的文本处理语言

awk 是一种功能强大的编程语言,专门用于文本和数据处理。与 grepsed 主要处理文本行不同,awk 允许我们按照字段来处理文本,非常适合格式化、筛选和汇总数据。

基本用法

awk '{print $1}' file.txt        # 打印文件每行的第一个字段
awk '{print $1, $3}' file.txt    # 打印每行的第 1 和第 3 字段
awk '/pattern/ {print $0}' file.txt  # 查找包含 'pattern' 的行
awk '{if ($1 > 100) print $1}' file.txt  # 如果第 1 列大于 100,打印该列

示例

假设我们有一个 CSV 文件 data.csv,它记录了商品的价格和数量,我们想要筛选出价格大于 100 的商品,并打印它们的名称和价格:

awk -F ',' '$2 > 100 {print $1, $2}' data.csv

这里使用了 -F ',' 选项来指定逗号作为字段分隔符。$1 表示商品名称,$2 表示价格。

另外,如果我们想统计每行的字段数量,并只打印字段数大于 3 的行,可以使用:

awk 'NF > 3' file.txt

如何高效组合使用它们

这三款工具各有特点,但它们可以在命令行中组合使用,从而达到更复杂的文本处理效果。例如,你可以先使用 grep 查找包含特定字符串的行,然后使用 sed 进行替换,最后通过 awk 来提取和格式化数据。

示例:日志分析

假设我们有一个日志文件 app.log,我们想要:

  1. 查找所有包含 error 字符串的行。
  2. 将这些行中的 ERROR 替换为 WARNING
  3. 提取并显示错误发生的时间(假设时间在每行的第一个字段)。

grep 'error' app.log | sed 's/ERROR/WARNING/g' | awk '{print $1, $0}'

这条命令首先用 grep 查找包含 error 的行,然后用 sed 替换 ERRORWARNING,最后使用 awk 提取并显示每行的第一个字段(时间)。

总结

在 Linux 和类 Unix 系统中,grepsedawk 被称为“文本处理三剑客”,它们是处理文本数据的核心工具:

  • grep 用于查找文本中符合特定模式的行;
  • sed 用于对文本进行流编辑,可以替换、删除、插入等;
  • awk 是一种强大的文本处理语言,适用于字段操作和格式化输出。

通过这三款工具的巧妙组合,您可以高效地处理和分析文本数据,轻松应对各种日志分析、配置修改和数据清洗任务。如果你还没有掌握它们,强烈建议在日常工作中深入了解和使用这些工具,它们将极大地提高你的工作效率。


作者其他作品:

【Java】Spring循环依赖:原因与解决方法

OpenAI Sora来了,视频生成领域的GPT-4时代来了

[Java·算法·简单] LeetCode 14. 最长公共前缀 详细解读

【Java】深入理解Java中的static关键字

[Java·算法·简单] LeetCode 28. 找出字a符串中第一个匹配项的下标 详细解读

了解 Java 中的 AtomicInteger 类

算法题 — 整数转二进制,查找其中1的数量

深入理解MySQL事务特性:保证数据完整性与一致性

Java企业应用软件系统架构演变史 

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

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

相关文章

【前端】理解 JavaScript 对象属性访问的复杂性

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: 前端 文章目录 💯前言💯理论基础:JavaScript 对象属性的访问模式1. 点符号访问(Dot Notation)2. 方括号访问(Bracket Notation)点符号…

【工具变量】上市公司企业研发不确定性数据(2013-2023年)

一、测算方式:参考顶刊《中国工业经济》孙薇(2023)老师的做法,本文从专利的申请与授权的视角出发,以企业当年申请的发明专利中最终未被授权的比例度量研发不确定性 (uc)。这是因为,相…

easyExcel单一下拉框和级联下拉框

文章目录&#xff1a; 单一下拉框级联下拉框 具体实现&#xff1a; 单一下拉框 public class BoolWriteHandler implements SheetWriteHandler {private List<String> dropDown;private List<Integer> indexList;public BoolWriteHandler(List<Integer> i…

【C++】指针与智慧的邂逅:C++内存管理的诗意

文章目录 RAII 智能指针auto_ptrunique_ptr shared_ptr模拟实现定制删除器循环引用 和 weak_ptr RAII RAII&#xff08;Resource Acquisition Is Initialization&#xff09;是一种广泛应用于 C 等编程语言中的编程范式&#xff0c;它的核心思想是&#xff1a;资源的获取和释放…

【优选算法 位运算】位运算算法入门详解:常见位运算总结

判定字符是否唯一 题目解析 算法原理 解法一 &#xff1a;哈希数组 从前往后扫描字符串&#xff0c;把扫描到的字符先进行判断&#xff0c;如果对应的 val 0 &#xff0c;则放入哈希表中&#xff0c;否则返回 false&#xff0c;知道扫描完整个字符&#xff1b;时间…

深入理解Linux进程管理机制

个人主页&#xff1a;chian-ocean 文章专栏-Linux 前言 进程是现代操作系统中一个不可或缺的概念&#xff0c;其主要目的在于管理资源、实现并发、提高系统效率&#xff0c;并确保系统的稳定性和安全性。 进程的定义 进程&#xff08;Process&#xff09; 是计算机操作系统中…

R 语言科研绘图第 4 期 --- 折线图-置信区间

在发表科研论文的过程中&#xff0c;科研绘图是必不可少的&#xff0c;一张好看的图形会是文章很大的加分项。 为了便于使用&#xff0c;本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中&#xff0c;获取方式&#xff1a; R 语言科研绘图模板 --- sciRplothttps://mp.…

springSecurity自定义登陆接口和JWT认证过滤器

下面我会根据该流程图去自定义接口&#xff1a; 我们需要做的任务有&#xff1a; 登陆&#xff1a;1、通过ProviderManager的方法进行认证&#xff0c;生成jwt&#xff1b;2、把用户信息存入redis&#xff1b;3、自定义UserDetailsService实现到数据库查询数据的方法。 校验&a…

使用 LabVIEW 与 PLC 通信的方式

要将 PLC 与 LabVIEW 或其他 NI 产品进行通信&#xff0c;首先需要明确 PLC 支持的通信协议和接口类型。NI 提供了多种方案&#xff0c;包括 OPC 服务器、Modbus、Ethernet/IP 和其他工业通信协议。下面将详细介绍这些方法&#xff0c;并进行比较分析&#xff0c;帮助你选择最适…

软考高级架构-9.4.4-双机热备技术 与 服务器集群技术

一、双机热备 1、特点&#xff1a; 软硬件结合&#xff1a;系统由两台服务器&#xff08;主机和备机&#xff09;、一个共享存储&#xff08;通常为磁盘阵列柜&#xff09;、以及双机热备软件&#xff08;提供心跳检测、故障转移和资源管理功能的核心软件&#xff09;组成。 …

专题二十五_动态规划_两个数组的 dp (含字符串数组)_算法专题详细总结

目录 动态规划_两个数组的 dp &#xff08;含字符串数组&#xff09; 1. 最⻓公共⼦序列&#xff08;medium&#xff09; 解析&#xff1a; 1. 状态表⽰&#xff1a; 2. 状态转移⽅程&#xff1a; 3. 初始化&#xff1a;​编辑 4. 填表顺序&#xff1a;​编辑 5. 返回值…

12,攻防世界simple_php

simple_php 题目来源:Cyberpeace-n3k0 题目描述: 小宁听说php是最好的语言,于是她简单学习之后写了几行php代码。 进入靶场 这段PHP代码是一个简单的web应用示例&#xff0c;让我们逐步分析这段代码&#xff1a; show_source(__FILE__);&#xff1a;这行代码会显示当前文件的…

NIO - selector简单介绍

一 前言 selector作为NIO当中三大组件之一&#xff0c;是处理NIO非阻塞模式下的核心组件&#xff0c;它允许一个单个线程管理多个通道。 NIO下的阻塞模式 因为对于阻塞模式下的NIO模式&#xff0c;存在很大的问题&#xff0c;即使在单线程下&#xff0c;对应的服务端也会一直进…

二、部署docker

二、安装与部署 2.1 安装环境概述 Docker划分为CE和EE&#xff0c;CE为社区版&#xff08;免费&#xff0c;支持周期三个月&#xff09;&#xff0c;EE为企业版&#xff08;强调安全&#xff0c;付费使用&#xff09;。 Docker CE每月发布一个Edge版本&#xff08;17.03&…

Camp4-L2:LMDeploy 量化部署进阶实践

书生浦语大模型实战营第四期&#xff1a;LMDeploy 量化部署进阶实践 教程链接&#xff1a;https://github.com/InternLM/Tutorial/tree/camp4/docs/L2/LMDeploy视频链接&#xff1a;https://www.bilibili.com/video/BV18aUHY3EEG/?vd_sourceb96c7e6e6d1a48e73edafa36a36f1697…

Qt之第三方库QCustomPlot使用(二)

Qt开发 系列文章 - qcustomplot&#xff08;二&#xff09; 目录 前言 一、Qt开源库 二、QCustomPlot 1.qcustomplot介绍 2.qcustomplot下载 3.qcustomplot移植 4.修改项目文件.pro 5.提升QWidget类‌ 三、技巧讲解 1.拖动缩放功能 2.等待更新 总结 前言 Qt第三方…

python数据分析之爬虫基础:selenium详细讲解

目录 1、selenium介绍 2、selenium的作用&#xff1a; 3、配置浏览器驱动环境及selenium安装 4、selenium基本语法 4.1、selenium元素的定位 4.2、selenium元素的信息 4.3、selenium元素的交互 5、Phantomjs介绍 6、chrome handless模式 1、selenium介绍 &#xff08;1…

LearnOpenGL学习(模型加载 -- Assimp,网格,模型)

完整代码见&#xff1a;zaizai77/Cherno-OpenGL: OpenGL 小白学习之路 Assimp 3D建模工具如Blender、3DS Max在导出模型文件时&#xff0c;会自动生成所有的顶点坐标、顶点法线和纹理坐标。 .obj 格式只包含了模型数据和材质信息&#xff08;颜色、贴图等&#xff09; Assi…

qtcanpool 知 08:Docking

文章目录 前言口味改造后语 前言 很久以前&#xff0c;作者用 Qt 仿照前端 UI 设计了一个 ministack&#xff08;https://gitee.com/icanpool/qtcanpool/blob/release-1.x/src/libs/qcanpool/ministack.h&#xff09; 控件&#xff0c;这个控件可以折叠。部分用户体验后&#…

【Linux】文件管理必备知识和基本指令

【Linux】文件管理必备知识和基本指令 什么是操作系统什么是文件什么是路径01. ls 指令02. pwd命令03. cd 指令04. touch指令05.mkdir指令&#xff08;重要&#xff09;&#xff1a;06.rmdir指令 && rm 指令&#xff08;重要&#xff09;&#xff1a;rmdir指令rm指令 0…