探索 Linux 三剑客:grep、sed 和 awk 的强大魅力

OIG2.jpg

序言

在 Unix 和 Linux 系统中,有一组被称为“三剑客”的命令行工具,它们是 grep、sed 和 awk。虽然它们在外表上看起来很简单,但它们的功能却非常强大,为文本处理提供了无限可能。本文将深入探讨这三个工具的用法和功能,以展示它们在日常工作中的重要性和价值。

一、grep:文本搜索的得力助手

grep 命令是 “Global Regular Expression Print” 的缩写,它用于在文本文件中搜索指定模式的行,并将匹配到的行打印出来。grep 不仅支持简单的字符串匹配,还可以使用正则表达式进行高级匹配。

  1. 递归搜索目录:使用 -r 选项可以递归地搜索目录中的所有文件。

    grep -r "keyword" directory
    
  2. 显示匹配行数:使用 -c 选项可以显示匹配到的行数。

    grep -c "keyword" filename
    
  3. 显示匹配行以及上下文:使用 -A-B-C 选项可以显示匹配行的上下文。

    # -A:在输出的时候包含结果所在行之后的指定行数。
    # -B:在输出的时候包含结果所在行之前的指定行数。
    # -C:在输出的时候包含结果所在行前后的指定行数。
    grep -A 2 -B 2 "keyword" filename
    
  4. 其他常用选项

    -i:在搜索时忽略大小写。
    -v:输出不带关键字的行,也就是反向查询。
    -n:显示结果所在行号。
    -o:只显示符合条件的字符串,但是不整行显示,每个符合条件的字符串单独显示一行。
    -w:匹配整个单词,如果是字符串中包含这个单词,则不作匹配。
    -l:只显示匹配命中的文件名称,而不显示具体匹配的内容。
    -e:实现多个选项的匹配,逻辑 or 关系。
    -f:从文件中获取模式
    

二、sed:流编辑器的魔力

sed 命令是 “Stream Editor” 的缩写,它是一种流编辑器,用于对文本进行逐行处理。sed 可以执行替换、删除、插入等操作,通常与正则表达式结合使用,对文本进行灵活的编辑。

  1. 编辑文件并保存:使用 -i 选项可以直接编辑文件并保存修改。

    sed -i 's/apple/orange/g' filename
    
  2. 只在特定行进行替换:使用行号或正则表达式指定替换的行范围。

    sed '10s/apple/orange/g' filename   # 替换第 10 行的 apple 为 orange
    sed '/pattern/s/apple/orange/g' filename   # 替换包含特定模式的行中的 apple 为 orange
    
  3. 删除空白行:使用 /^$/d 命令可以删除空白行。

    sed '/^$/d' filename
    
  4. 其他常用选项

    -e:允许使用多个编辑命令。
    -f:允许指定包含 sed 命令的文件。
    -r:使用扩展正则表达式。
    -u:使缓冲区无缓冲。
    -n:取消默认输出,sed 默认会输出所有文本内容,使用 -n 参数后只显示处理过的行
    

三、awk:文本处理的瑞士军刀

awk 命令是由其创始人(Alfred Aho、Peter Weinberger 和 Brian Kernighan)的首字母组成的缩写,它是一种强大的文本处理工具,可以对文本文件进行逐行扫描,并根据指定的规则进行处理和操作。awk 以行为单位进行处理,可以方便地对字段进行分割和处理,并支持自定义函数和变量。

  1. 计算文件中某列的总和:通过累加每行的某个字段,可以计算出该字段的总和。

    awk '{sum+=$1} END {print sum}' filename
    
  2. 输出指定字段的唯一值:使用数组保存已经出现过的值,以保证唯一性。

    awk '!seen[$1]++' filename
    
  3. 按条件筛选行并处理:使用条件语句进行筛选,并在符合条件的行上执行特定的操作。

    awk '$2 > 10 {print $1,$2*2}' filename   # 如果第二列大于 10,则打印第一列和第二列乘以 2 的结果
    

推荐阅读

  1. Zookeeper 注册中心:单机部署
  2. 【JavaScript】探索 JavaScript 中的解构赋值
  3. 深入理解 JavaScript 中的 Promise、async 和 await
  4. 探索生产者/消费者模式:解决并发编程中的资源竞争
  5. 深入探究 Spring Boot Starter:从概念到实践

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Franz Electron + React 源码启动运行填坑指南

环境要求 安装miniconda python 环境electron/rebuild用得着,miniconda 默认自带的 python 是 3.11 版本,比较新; 安装virsual studio 2019 要把C桌面相关的都安装了,大概需要20G,不要安装到 C 盘,都安装到…

古月居讲师/签约作者招募计划

机器人,作为一个集成了多学科技术的复杂系统,其开发过程充满了挑战。为了帮助开发者们更好地克服这些挑战,提升项目的开发效率和质量,古月居特别招募[博客签约作者/课程讲师]。如果您平常热爱记录、分享开发者经验的习惯&#xff…

vue3 中 使用 antd中的select 组件的带搜索框 展开后可对选项进行筛选搜索功能

鼠标进入以后下拉显示&#xff1a; 输入字符串以后&#xff1a; 可以看出对数据进行了筛选。 具体代码&#xff1a; 结构上&#xff1a;<a-selectv-model:value"formState.formFlow"show-searchallowClearplaceholder"输入选择流程":options"op…

批量文件夹随机重命名:一键操作,提升管理效率的技巧

在数字化时代&#xff0c;文件夹的管理是日常工作中不可或缺的一部分。对于拥有大量文件夹的用户来说&#xff0c;批量文件夹重命名是提高工作效率的关键步骤。而随机重命名不仅能增加文件组织的多样性&#xff0c;还能在一定程度上保护隐私。本文将介绍云炫文件管理器如何通过…

答辩PPT内容生成困难?文心一言逐步引导内容生成

这些网站我愿称之为制作答辩PPT的神&#xff01; 很多快要毕业的同学在做答辩PPT的时候总是感觉毫无思路&#xff0c;一窍不通。但这并不是你们的错&#xff0c;对于平时没接触过相关方面&#xff0c;第一次搞答辩PPT的人来说&#xff0c;这是很正常的一件事。一个好的答辩PPT…

GPT-4o 屠龙式震撼!多模态、实时交互、全员免费可用,丝滑语音交互的 ChatGPT 这把赢麻了

从 5 月初爆出将在 9 日发布搜索引擎&#xff1b;到 5 月 11 日&#xff0c;官宣将在当地时间 5 月 13 日 10 时发布 ChatGPT 与 GPT-4 更新&#xff1b;再到 Sam Altman 亲自下场辟谣「不是 GPT-5&#xff0c;也不是搜索引擎」&#xff0c;而是「像魔法一样的新东西」&#xf…

transformer通俗理解

transformer中最麻烦的encoder模块其实张量和矩阵的变化维度比较复杂。我感觉这篇文章讲的特别详细Q、K、V 与 Multi-Head Attention 多头注意力机制 - 知乎 我总结一下文章几个很重要的点吧&#xff01;算是我学的一点收获 1.什么是QKV&#xff1f; 2.怎么理解多头&#xff…

解密跨境电商ERP开发的5大常见问题及解决方案

跨境电商平台开发是一个充满挑战的领域&#xff0c;企业在此过程中常常面临着各种技术、管理和资源等方面的问题。下面是解析这些问题并提供解决方案的五大主要问题&#xff1a; 1. 集成难题&#xff1a; 在跨境电商平台开发中&#xff0c;一个最为常见的问题是集成不同系统和…

移动应用开发实验四AlarmManager实现闹钟提醒

实验目的和要求 在Android Studio中&#xff0c;通过AlarmManager实现闹钟提醒。 点击“SET ALARM”后&#xff0c;采用Toast方式提示用于设定的闹钟成功&#xff0c;并包含设定的闹钟启用时间。 当闹钟生效时&#xff0c;采用AlertDialog实现闹钟题型&#xff0c;并通过Ale…

React脚手架,配置环境变量(生产模式,开发模式)

项目搭建方式&#xff1a;react脚手架(create-react-app) 1. 下载依赖&#xff1a; npm install dotenv npm install dotenv-expandnpm install dotenv-cli -S 2.配置环境变量&#xff1a; 项目根部录下创建文件.env .env.pro .env.dev 配置package.json - scripts…

ANSYS Workbench中如何从面选择创建节点集合named selection?

点击选中一个面&#xff0c;右键named selection&#xff1a;

轮式机器人简介

迄今为止,轮子一般是移动机器人学和人造交通车辆中最流行的运动机构。它可达到很高的效率, 如图所示, 而且用比较简单的机械就可实现它的制作。 另外,在轮式机器人设计中,平衡通常不是一个研究问题。 因为在所有时间里,轮式机器人一般都被设计成在任何时间里所有轮子均与地接…