0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

为什么说每个Linux极客都需要了解Sed和Awk

jf_ZqFkd6Up 来源:Linux迷 作者:Linux迷 2022-11-22 11:24 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

sed 和 awk 是每个 Linux 高级用户最喜欢的工具。但它们是什么?以及如何使用它们来处理文本文件?两个最被低估的 Linux 实用程序是 sed 和 awk。尽管它们看起来有点神秘,但如果您必须对大段代码或文本进行重复更改,或者如果您必须分析某些文本,sed 和 awk 是极为有用的。那么,它们是什么?它们是如何使用的?以及,当它们组合在一起时,它们如何使处理文本变得更容易?

什么是sed?

sed 由传奇的计算先驱 Lee E. McMahon 于 1971 年在贝尔实验室开发。该名称代表“流编辑器”。sed 允许您通过一种紧凑而简单但图灵完备的编程语言以编程方式编辑正文或文本流。sed 的工作方式很简单:它将文本逐行读取到缓冲区中。对于每一行,它将在适用的情况下执行预定义的指令。例如,如果有人要编写一个 sed 脚本,将单词“beer”替换为“soda”,然后传入一个包含“99 Bottles of Beer on the Wall”完整歌词的文本文件,它将通过逐行打印该文件,并打印出“99 Bottles of Soda on the Wall”,依此类推。最基本的 sed 脚本是“Hello World”。在这里,我们使用仅输出字符串的 echo 命令来打印“Hello World”。但是我们将它传递给 sed,并告诉它用“LinuxMi.com”替换“World”。一目了然。

		
			
linuxmi@linuxmi:~/www.linuxmi.com$ echo "Hello World" | sed s/World/LinuxMi.com/

		38900f7a-6a13-11ed-8abf-dac502259ad0.png如果您需要进行一些更复杂的编辑,您还可以将 sed 指令组合到文件中。让我们将 A-ha 的“ Take On Me ”的歌词替换为Greg的“I”、“Me”和“My”的每个实例。首先,将歌曲的歌词放入名为linuxmi.com.txt的文本文件中。然后打开您喜欢的文本编辑器,并添加以下行。确保您创建的文件以.sed结尾。

		
s/I/Greg/
s/Me/Greg/
s/me/Greg/
s/My/Greg/
s/my/Greg/
您可能会注意到上面示例中的重复(例如 s/me/Greg/ 和 s/Me/Greg/)。这是因为 sed 的某些版本,例如 macOS 附带的版本,不支持不区分大小写的匹配。因此,我们必须为每个单词编写两条指令,以便 sed 识别大写和非大写版本。这不会完美地工作,就好像您已经手动替换了“I”、“Me”和“My”的每个实例。请记住,我们只是将其用作练习来演示如何将 sed 指令组合到一个脚本中,然后使用单个命令执行它们。然后,我们需要调用该文件。为此,请运行此命令。

		
			
linuxmi@linuxmi:~/www.linuxmi.com$ cat linuxmi.com.txt | sed -f linuxmi.sed
让我们看看这是怎么做的。你可能已经注意到我们这里没有使用 echo。我们使用 cat。这是因为 cat 会打印文件的全部内容,而 echo 只会打印文件名。您可能还注意到,我们使用“-f”标志运行 sed。这告诉它将脚本作为文件打开。
最终结果是这样的:38adde92-6a13-11ed-8abf-dac502259ad0.png还值得注意的是 sed 支持正则表达式 (REGEX)。这些允许您使用特殊而复杂的语法在文本中定义模式。这是一个如何工作的示例。我们将采用上述歌词,但使用正则表达式打印出每行不以“Take”开头的行。

		
			
linuxmi@linuxmi:~/www.linuxmi.com$ cat linuxmi.com.txt | sed /^Take/d

		38d81bda-6a13-11ed-8abf-dac502259ad0.png当然,sed 非常有用。而且与 awk 结合使用时会更加强大。

什么是 AWK?

AWK 与 sed 一样,是一种处理大量文本的编程语言。但是,虽然人们使用 sed 来处理和修改文本,但人们大多使用 AWK 作为分析和报告的工具。与 sed 一样,AWK 最初是在 1970 年代在贝尔实验室开发的。它的名字并非来自程序所做的事情,而是来自每个作者的姓氏:Alfred Aho、Peter Weinberger 和 Brian Kernighan。总而言之,AWK 指的是编程语言本身。在小写中,awk 指的是命令行工具。AWK 通过一次读取一行文本文件或输入流来工作。扫描每一行以查看它是否与预定义的模式匹配。如果找到匹配项,则执行操作。但是虽然 sed 和 AWK 可能有相似的目的,但它们是两种完全不同的语言,具有两种完全不同的设计理念。AWK 更类似于一些通用语言,如 C、Python 和 Bash。它具有诸如函数之类的东西以及更类似于 C 的方法来处理诸如迭代和变量之类的东西。简而言之,AWK 感觉更像是一种编程语言。所以,让我们尝试一下。使用“Take On Me”的歌词,我们将打印所有超过 20 个字符的行。

		
			
linuxmi@linuxmi:~/www.linuxmi.com$ awk ' length($0) > 20 ' linuxmi.com.txt

		38fe5f52-6a13-11ed-8abf-dac502259ad0.png

结合两者

awk 和 sed 结合起来都非常强大。您可以通过使用 Unix 管道来做到这一点。让我们试试这个:我们将使用 awk 列出“Take On Me”中超过 20 个字符的所有行。然后,我们将删除所有以“Take”开头的行。总之,这一切看起来像这样:

		linuxmi@linuxmi:~/www.linuxmi.com$ awk 'length($0)>20' linuxmi.com.txt | sed /^Take/d输出如下:392962d8-6a13-11ed-8abf-dac502259ad0.png

sed 和 awk 的力量

在这篇文章中我们就解释这么多,但希望您现在对 sed 和 awk 的强大功能有所了解。简而言之,它们是一个文本处理引擎。那么,你为什么要关心呢?除了您永远不知道何时需要对文本文档进行可预测的重复更改这一事实之外,sed 和 awk 非常适合解析日志文件。当您尝试调试 LAMP 服务器中的问题或查看访问日志以查看您的服务器是否被黑客入侵时,这特别方便。


审核编辑 :李倩


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    88

    文章

    11810

    浏览量

    219513
  • 编程语言
    +关注

    关注

    10

    文章

    1965

    浏览量

    39850
  • SED
    SED
    +关注

    关注

    0

    文章

    26

    浏览量

    27644

原文标题:为什么说每个 Linux 极客都需要了解 Sed 和 Awk

文章出处:【微信号:Linux迷,微信公众号:Linux迷】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    YAGEO国巨贴片电容采购需要了解哪些

    在采购YAGEO国巨贴片电容时,为确保采购过程顺利且产品符合需求,需从以下核心维度进行系统考量: 一、明确应用需求与参数匹配 基础参数确认 电容值与耐压值 :根据电路设计确定所需电容值范围(如0.1μF至100μF)及耐压等级(如6.3V、16V、50V等)。例如,高频滤波电路需选用低ESR(等效串联电阻)的X7R材质电容,而电源去耦电路可能需大容量电解电容替代方案。 温度系数与稳定性 :若应用环境温度波动大(如汽车电子),需选择温度系数小的材质(如NPO/C0G,温
    的头像 发表于 03-05 17:50 1125次阅读

    需要了解的投入式液位计优势!

    液位计
    jzyb
    发布于 :2026年01月27日 11:47:45

    基于AWK6809的LT8609替代方案

    在汽车电子、工业控制及低功耗物联网等应用中,LT8609 系列凭借宽输入电压和低静态电流长期作为经典降压方案。AnalogWin 推出的 AWK6809 同步降压稳压器,在保持与 LT8609 引脚
    的头像 发表于 01-23 09:43 323次阅读
    基于<b class='flag-5'>AWK</b>6809的LT8609替代方案

    为何从LT8609换用AWK6809

    AWK6809 是一款高性能同步降压稳压器,兼容 LT8609 的引脚与外围设计,无需修改 PCB 即可实现无缝替换。它具备更低静态电流、内置扩频调制以优化 EMI、增强的保护功能及快速动态响应,已
    的头像 发表于 01-08 09:36 419次阅读
    为何从LT8609换用<b class='flag-5'>AWK</b>6809

    AWK6809优化能效的降压转换器

    AWK6809是一款42V/3A车规级同步降压芯片,凭借5μA超低静态电流、92.5%峰值效率及可调开关频率(200kHz-2.2MHz),满足汽车电子与工业设备对高效供电的严苛需求。其宽压输入与低EMI特性显著提升系统稳定性,适用于ADAS、无人机等高性能场景。
    的头像 发表于 12-03 09:44 758次阅读
    <b class='flag-5'>AWK</b>6809优化能效的降压转换器

    电缆槽:您需要了解的电缆管理知识

    您是否曾被房间或办公室里杂乱的网络或电线所困扰?为了保持整洁美观,电缆管理必不可少。市场上有各种电缆管理工具,包括电缆扎带、标签、支架和线槽。电缆线槽是空心外壳,可帮助管理和整理电缆、电线和电线,保护电缆免受物理损坏或潜在的电气火灾。在本文中,我们将介绍有关电缆线槽的所有信息,使您能够根据自己的特定需求做出正确的选择。 什么是电缆槽? 电缆槽是一种空心通道,有助于封闭和保护家庭或办公室内的网络和电缆。电缆
    的头像 发表于 12-02 10:33 507次阅读

    移植蜂鸟需要Linux环境下吗?

    《手把手教你设计CPU》书上运行Verilog仿真测试那章为了重现仿真环境,最好在Linux环境下。不知道移植蜂鸟是否需要Linux环境下,直接在Windows操作系统可否移植开发
    发表于 11-10 07:42

    linux系统awk特殊字符命令详解

    Linux系统中,awk 是一种非常强大的文本处理工具,能够对文本数据进行分析、格式化和筛选。利用其内置的特殊字符和操作符,用户可以实现复杂的数据处理任务。以下对一些常见的awk特殊字符和操作符
    的头像 发表于 07-28 16:38 729次阅读

    Linux权限体系解析

    你真的了解Linux权限吗?大多数人只知道rwx,但Linux的权限体系远比你想象的复杂和强大。今天我们深入探讨Linux的12位权限体系,这是每个
    的头像 发表于 07-23 16:57 1058次阅读

    Linux OpenSSL介绍

    了解openssl之前,我们首先要了解SSLTLS是什么。
    的头像 发表于 06-26 14:12 753次阅读
    <b class='flag-5'>Linux</b> OpenSSL介绍

    ​​sed命令从入门到实战

    sed是一种流编辑器,能高效地完成各种替换、删除、插入等操作,按照文件数据行顺序,重复处理满足条件的每一行数据,然后把结果展示打印,且不会改变原文件内容。
    的头像 发表于 06-18 15:59 1414次阅读

    AWK6943ABTER:车规级高可靠电源解决方案

    AWK6943ABTER以车规级可靠性+简设计成为工业/汽车电源首选,其宽压输入、纳米级响应及打嗝式保护技术,为高可靠系统提供国产化高性能替代方案。
    的头像 发表于 06-16 17:12 1215次阅读
    <b class='flag-5'>AWK</b>6943ABTER:车规级高可靠电源解决方案

    AWK6943:MP9943 的高效兼容替代方案及技术优势

    AWK6943 对 MP9943 的替换不仅是引脚与功能的简单兼容,更是性能与可靠性的全面升级。更低的功耗、更高的效率、汽车级认证及灵活的配置特性,使其在消费电子、工业控制、车载系统等场景中更具优势。对于需要优化续航、提升稳定性或拓展应用场景的设计,
    的头像 发表于 06-12 13:51 861次阅读

    AWK6943:MP9943 国产DCDC兼容替代方案及技术优势

    高效兼容替换方案:AWK6943全面替代MP9943的技术解析在电源管理芯片领域,兼容替换方案的核心在于引脚定义、电气参数与功能特性的高度匹配。AWK6943作为一款高性能同步降压稳压器,凭借
    的头像 发表于 06-12 12:00 1214次阅读
    <b class='flag-5'>AWK</b>6943:MP9943 国产DCDC兼容替代方案及技术优势

    激光二管的基本特性和使用注意事项

    问题。在驱动电路设计时要求恰当的电流控制和热管理,因此建议引入激光二管保护电路和冷却系统。本文总结了使用激光二管时需要了解的注意事项等内容。
    的头像 发表于 06-03 13:48 4322次阅读
    激光二<b class='flag-5'>极</b>管的基本特性和使用注意事项