Linux文本处理三大利器Grep、AWK、Sed

news2024/9/21 18:50:30

写在前面

Linux三剑客是文本处理工具,它们可以帮助我们快速、高效地对文本进行处理。其中包括了grep、awk、以及sed这三个强大的命令行工具。
Linux 三剑客主要作用:

  • grep,它可以根据正则表达式查找相关内容并打印对应的数据。
  • awk,它可以根据定位到的数据行处理其中的分段。
  • sed,它可以定位到数据行并对数据进行增删改查操作。
    这些工具在Linux系统中得到了广泛的应用,因此成为了Linux系统管理员和开发者必须要掌握的技能之一。

grep命令

grep命令是一种在文本中查找匹配字符串的工具。它允许用户根据正则表达式查找相关内容并打印对应的数据。以下是grep命令的格式:

grep [选项] “模式” [文件]

下面是grep命令的一些常用选项参数:

  • -c :计算找到 ‘搜寻字符串’ 的次数
  • -i :忽略大小写
  • -n :输出行号
  • -v :反向选择,亦即显示出没有 ‘搜寻字符串’ 内容的那一行。
  • –color=auto :可以将找到的关键词部分加上颜色显示。
  • -A n:显示匹配到的字符串所在的行及其后n行,after
  • -B n:显示匹配到的字符串所在的行及其前n行,before
  • -C n:显示匹配到的字符串所在的行及其前后各n行,context

以下为两个具体实例

# 查找文件中包含“hello”的所有行并显示行号
$ grep -n "hello" test.txt
1:hello world
3:hello linux

# 查找文件中不包含“hello”的所有行
$ grep -v "hello" test.txt
welcome to linux

grep匹配模式常常为正则表达式,以下为常用正则:
在这里插入图片描述

AWK命令

AWK命令是一种强大的文本处理工具,通过它可以根据定位到的数据行处理其中的分段。AWK程序逐行扫描文件,并按照指定的规则处理每个输入行,输出格式也可以自由控制。以下是AWK命令的常用语法:

awk [-F field-separator] 'commands' input-file(s)

下面是一些AWK常用内置变量和实例:

  • $0: 表示整个文本行
  • $1: 表示第一个域(字段)
  • NF: 表示域的数量
  • NR: 表示行号
# 显示文件中的所有行号和行内容
$ awk '{print NR, $0}' test.txt

# 显示按照分隔符分割的第二个域
$ awk -F "," '{print $2}' test.csv

AWK还有很多高级用法,如下为常用函数实例:

1.  toupper()和tolower()

awk 'BEGIN{ print toupper("hello world") }'

输出结果为:HELLO WORLD

而:

awk 'BEGIN{ print tolower("Hello World") }'

输出结果为:hello world

2. length()

awk 'BEGIN{ print length("hello world") }'

输出结果为:11

3. substr()

awk 'BEGIN{ print substr("hello world", 2, 5) }'

输出结果为:ello 

如下为awk BEGIN和END command执行条件示例

1. BEGIN模式,是指命令在处理文本之前执行,表示提取text.txt文件内容前打印test1 test2 test3
awk 'BEGIN{print "test1","test2","test3"}{print}' test.txt
2. END模式,是指命令在处理文本之后执行,表示提取文件内容后打印end1 end2 end3
awk '{print} END{print "end1","end2","end3"}' test.txt
3. BEGIN模式和END模式同时存在时,其中,BEGIN与END之间的{}相当于一个循环体,对文件中的每一行进行处理
awk 'BEGIN{print "test1","test2","test3"}{print} END{print "end1","end2","end3"}' test.txt

sed命令

sed是一种流编辑器,它可以定位到数据行并对数据进行增删改查操作。sed命令的格式如下:

sed [options] 'command' file(s)

以下是sed命令的一些常用选项:

  • -n: 不输出模式空间内容而是手动输出指定的行
  • -e: 允许多个命令
  • -i: 修改文件内容
  • -r: 使用扩展正则表达式

以下是sed命令的一些常用操作:

  • a :新增
  • c :取代
  • d :删除
  • i :插入
  • p :打印
  • s :取代

通过如下实例理解sed命令:

1. sed 'a This is a new line' file.txt:在文件file.txt的末尾新增一行文字“This is a new line”。

2. sed 'c old line new line' file.txt:将文件file.txt中的“old line”替换成“new line”。

3. sed 'd' file.txt:删除文件file.txt中的每一行内容,等效于清空文件。

4. sed 'i This is a new line' file.txt:在文件file.txt的首行插入一行文字“This is a new line”。

5. sed 'p' file.txt:打印文件file.txt的每一行内容,即重复一遍该文件内容。

6. sed 's/old/new/g' file.txt:将文件file.txt中所有的“old”替换成“new”。其中,“/g”表示全局替换,即一行中出现多个“old”时全部替换。

7. sed -i '/test/d' test.txt 删除文件中包含"test"的行并保存修改

命令实战

  1. 使用grep提取本机IP命令
ip a|grep inet|grep -Po '(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[1-9])(\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)){3}'

具体解释如下:

  • ip a:列出网络接口的属性,包括IP地址。

  • grep inet:筛选包含“inet”的行,这些行包含有IP地址相关信息。

  • grep -Po:使用Perl正则表达式来匹配IP地址,保留匹配到的IP地址。

  • ‘(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[1-9])(.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)){3}’:正则表达式,用来匹配IP地址。

其中:

- (1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[1-9]):匹配0-199中的数字,或者200-249中的数字,或者250-255中的数字,或者10-99中的数字,或者1-9中的数字。

- (\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)){3}:匹配由三个点隔开的三个数字段,每个数字段匹配的规则同上述第一条。
  1. 使用sed提取本机IP命令
ip a|grep inet|sed 's/inet /''/g'|sed 's/\/.*$/''/'

具体解释如下:

  • 's/inet /''/g' 将inet 替换为空字符
  • 最后一部分 \/ 表示/字符,.*$表示匹配任意多个,意思是将/和后面的字符串全部替换为空字符
  1. 使用awk提取本机IP命令
ip a|grep inet|awk -F 'inet ' '{print $2}'|awk -F '/' '{print $1}'

如上命令表示先提取第二列的内容,获取类似下图:
在这里插入图片描述
然后通过/分割,取第一列的内容。

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

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

相关文章

redhat8配置vsftpd服务

目录 一、匿名访问模式 1.1、ftp服务器端修改配置(配置文件:/etc/vsftpd/vsftpd.conf) 1.2 修改ftp目录的权限 1.3 设置selinux服务对ftp服务的访问规则策略为允许 1.4 防火墙添加ftp服务 1.5 测试 二、本地用户模式 2.1 服务端修改配…

6、什么是类型断言?

虽然 TypeScript 很强大,但有时还不如我们了解一个值的类型方便,这时候我们更希望 TypeScript 不要帮我们进行类型检查,而是交给我们自己来,所以就用到了类型断言。类型断言有点像是一种类型转换,它把某个值强行指定为…

Vue收集表单数据学习笔记

收集表单数据 v-model双向数据绑定,收集的是input框的value,单选按钮不存在value,就像代码中的男女选项,即使绑定性别v-model“sex”,控制台依然不能接收性别的值,因为没有value值,&#xff0c…

python 第二章——数据类型详解

文章目录 前言一、什么是数据类型1.变量2.注释 二、数字三、字符串四、布尔五、列表六、元组七、集合八、字典总结 前言 本系列教程目录,可点击这里查看:Python教程目录 学习一门编程语言,第一件事就应该是熟练掌握这门编程语言的基本数据类…

[Java]JavaWeb开发中的MVC设计模式

一、有关Java Web与MVC设计模式 学习过基本Java Web开发的人都已经了解了如何编写基本的Servlet,如何编写jsp及如何更新浏览器中显示的内容。但是我们之前自己编写的应用一般存在无条理性,对于一个小型的网站这样的编写没有任何问题,但是一但…

MCDF代码详解,mcdf_rgm_pkg.sv代码超详细注释

寄存器模块代码详解 好戏开始: `include "param_def.v" package mcdf_rgm_pkg; import uvm_pkg::*; `include "uvm_macros.svh" import reg_pkg::*; //具有uvm_reg类型的专用寄存器描述[write-red-reg] class ctrl_reg extends uvm_r…

机器人教学中游戏化课程案例尝试

本文内容严格按创作模板发布: 2023年LPL春季赛季后赛正在火热进行中,你们心中的总冠军是哪支队伍呢?作为热爱游戏的程序猿,一起来聊聊你那些有意义的游戏开发经历吧! 游戏化ROS机器人课程的优势有以下七点&#xff1a…

第3章-运行时数据区

此章把运行时数据区里比较少的地方讲一下。虚拟机栈,堆,方法区这些地方后续再讲。 转载https://gitee.com/youthlql/JavaYouth/tree/main/docs/JVM。 运行时数据区概述及线程 前言 本节主要讲的是运行时数据区,也就是下图这部分&#xff0c…

5.微服务项目实战---Gateway--服务网关,实现统一认证、鉴权、监控、路由转发等

5.1 网关简介 大家都都知道在微服务架构中,一个系统会被拆分为很多个微服务。那么作为客户端要如何去调用 这么多的微服务呢?如果没有网关的存在,我们只能在客户端记录每个微服务的地址,然后分别去调用。 这样的架构&#xff0…

用友联合7家信创生态伙伴成立“信创领先实践联盟”,助力企业数智化国产替代

数字经济背景下,面对国际局势不稳定等以切不确定因素,只有突破和掌握关键核心技术,打造生态话语权,掌握产业发展主动权,向产业价值链高端迈进,我国才能摆脱受制于人局面。而推动信创产业繁荣发展&#xff0…

SAP-选择实施离散制造模式还是重复制造模式?

Implement Discrete Manufacturing or Repetitive Manufacturing? 翻译一篇,反正我也写不出来~~~~ “狗还是猫?” 这可能是世界上第二难的问题。 想知道最难的是什么? 这里是: “实施离散制造还是重复制造?” 作…

【设计模式】我终于读懂了访问者模式。。。

🌰测评系统的需求 将观众分为男人和女人,对歌手进行测评,当看完某个歌手表演后,得到他们对该歌手不同的评价(评价 有不同的种类,比如 成功、失败 等)传统方案 🌱传统方式的问题分析 如果系统比较小&…

2023年面试题入门篇和进阶篇万余字题目总结【答案+解析】

2023年Java面试题入门篇和进阶篇总结【答案解析】 入门篇1.、下列代码输出结果是()2.x为float类型,y为double类型,a为int类型,b为long类型,c为char类型,问xy*a/xb/ac的值是什么类型3.下列哪种说法是正确的4.mysql表use…

rollup打包封装的js类库

rollup中文网:简介 | rollup.js 中文文档 | rollup.js中文网Rollup 是一个 JavaScript 模块打包器,可以将小块代码编译成大块复杂的代码,Rollup 对代码模块使用新的标准化格式,这些标准都包含在 JavaScript 的 ES6 版本中。https:…

postman解决报错填坑指南

postman报错问题处理总结 问题1:如何解决postman请求异常丢掉proxy开头header自动使用系统环境变量代理问题描述:postman请求,配置了proxy开头的header,但是发请求的时候没有携带,可以查看postman的View-Show Postman …

D. Frets On Fire(二分 + 前缀和)

Problem - D - Codeforces Miyako带着一个乌克丽丽来到跳蚤王国。她与当地的跳蚤居民成为好朋友,并每天为他们演奏美妙的音乐。 作为国报,跳蚤们为她制作了一个更大的乌克丽E:它有n根这,每核这上都有(10181)个品位(ires)&#xff…

危险区域闯入识别系统 yolov8

危险区域闯入识别系统通过YOLOv8网络模型技术,危险区域闯入识别系统对现场画面中发现有人违规闯入禁区,系统立即抓拍告警同步回传后台。YOLOv8 提供了一个全新的 SOTA 模型,包括 P5 640 和 P6 1280 分辨率的目标检测网络和基于 YOLACT 的实例…

打电话用的耳机哪个牌子的好?打电话专用的蓝牙耳机推荐

耳机是可以帮助我们进行工作的娱乐设备,像日常中使用最多的就是通话和听歌啦,近几年不论是从产品推出速度,还是做工及品质上来说都有了质的飞跃,下面分享几款打电话音质好的蓝牙耳机。 一、南卡小音舱Lite2蓝牙耳机 蓝牙版本&am…

Inpaint Anything (AI替换)

1、介绍 Inpaint Anything 是一个结合了 SAM、图像修补模型(例如 LaMa)和 AIGC 模型(例如 Stable Diffusion)等视觉基础模型的AI图像替换,修补系统。 基于此系统,用户可以方便的使用IA进行图像替换&#…

electron+vue3全家桶+vite项目搭建【14】electron多窗口,多语言切换不同步更新问题

文章目录 引入问题演示补充逻辑注意封装缓存工具类补充状态管理调整多语言初始化调整多语言切换组件 解决方案思路整理渲染进程监听语言切换主进程创建多语言切换处理语言切换组件通知主进程语言切换 最终实现效果演示 引入 我们之前在这篇文章中集成了 多语言切换&#xff0c…