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

grep, awk, 和 sed 是三个强大的文本处理工具,在Linux系统中广泛使用。每个工具都有其独特的特性和用法,下面我会对每一个工具进行简要的介绍和说明。

1.grep

grep 是一个用于模式搜索的工具,它可以在文件或者标准输入中搜索包含特定模式的行并输出。模式可以是简单的字符串,也可以是复杂的正则表达式。
基本用法:

grep [options] pattern [file...]
1.1 grep参数:

-a 不要忽略二进制数据。

-A<显示列数> 除了显示符合范本样式的那一行之外,并显示该行之后的内容。

-b 在显示符合范本样式的那一行之外,并显示该行之前的内容。

-c 计算符合范本样式的列数。

-C<显示列数>或-<显示列数> 除了显示符合范本样式的那一列之外,并显示该列之前后的内容。

-d<进行动作> 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep命令将回报信息并停止动作。

-e<范本样式> 指定字符串作为查找文件内容的范本样式。

-E 将范本样式为延伸的普通表示法来使用,意味着使用能使用扩展正则表达式。

-f<范本文件> 指定范本文件,其内容有一个或多个范本样式,让grep查找符合范本条件的文件内容,格式为每一列的范本样式。

-F 将范本样式视为固定字符串的列表。

-G 将范本样式视为普通的表示法来使用。

-h 在显示符合范本样式的那一列之前,不标示该列所属的文件名称。

-H 在显示符合范本样式的那一列之前,标示该列的文件名称。

-i 忽略字符大小写的差别。

-l 列出文件内容符合指定的范本样式的文件名称。

-L 列出文件内容不符合指定的范本样式的文件名称。

-n 在显示符合范本样式的那一列之前,标示出该列的编号。

-q 不显示任何信息。

-R/-r 此参数的效果和指定“-d recurse”参数相同。

-s 不显示错误信息。

-v 反转查找。

-w 只显示全字符合的列。

-x 只显示全列符合的列。

-y 此参数效果跟“-i”相同。

-o 只输出文件中匹配到的部分。

1.2 grep示例
1.2.1 基本文本搜索

grep "text" file.txt  # 在 file.txt 中搜索包含 "text" 的行。

在这里插入图片描述

这里只匹配出了带text的行

1.2.2 使用锚点匹配行的开始和结束
grep "^text" file.txt  # 在 file.txt 中搜索以 "text" 开始的行。

在这里插入图片描述
这里只会匹配到file.txt中开头是text的行

grep "text$" file.txt  # 匹配text结束的行

在这里插入图片描述

1.2.3 在 file.txt 中搜索包含 “t” 后跟零个或多个 “e”,然后是 “xt” 的行。

在使用扩展正则表达式时,可以使用 +:

grep -E "te+xt" file.txt

在这里插入图片描述

1.2.4 在 file.txt 中搜索包含 “t” 后跟一个或多个 “e”,然后是 “xt” 的行。
grep "te\{2\}xt" file.txt  # 使用 {} 指定前一个字符的精确出现次数

在这里插入图片描述

1.2.5 在扩展正则表达式中,你可以使用圆括号对模式进行分组,以便与 |、*、+ 以及 {} 一起使用。
grep -E "(text|pattern)+" file.txt # 在 file.txt 中搜索包含一个或多个 "text" 或 "pattern" 的行。

在这里插入图片描述

1.2.6 使用 \d, \w, \s(需要 grep -P)

当你需要更复杂的正则表达式支持时,如 \d 匹配数字,\w 匹配单词字符,\s 匹配空白符,你可以使用 grep 的 -P 选项,它支持 Perl 兼容正则表达式(PCRE)。

1.2.7 -i(忽略大小写)

使搜索不区分大小写。


grep -i "pattern" file.txt

在这里插入图片描述

1.2.8 -v(反向匹配)

仅显示不匹配给定模式的行。

grep -v "pattern" file.txt

在这里插入图片描述
这里只会匹配小写的‘pattern’的行,大写的是不会包含进去

1.2.9 -c(计数)

统计匹配模式的行数。

grep -c "pattern" file.txt

在这里插入图片描述

1.2.10 -n(显示行号)

在每个匹配的行前显示行号。

grep -n "pattern" file.txt

在这里插入图片描述

1.2.11 -r(递归搜索)

递归地搜索指定目录下的所有文件。

grep -r "pattern" /path/to/directory
1.2.12 -F(固定字符串搜索)

按固定字符串而不是正则表达式搜索。

grep -F "pattern" file.txt

这个命令会将 “pattern” 视为固定字符串,而不是正则表达式。

在这里插入图片描述

1.2.13 -m NUM(匹配计数)

仅匹配文件中的前 NUM 行。

grep -m 5 "pattern" file.txt

这个命令会显示 file.txt 中前五个匹配 “pattern” 的行。

在这里插入图片描述

2. awk

awk 是一种编程语言,也是一个强大的文本处理工具,它在 Linux 和 Unix 系统中被广泛使用。awk 适合进行模式扫描和处理,特别是对于列式数据。以下是一些常见的 awk 用法和示例。

2.1 打印文件内容

awk '{ print }' file.txt

这将打印 file.txt 中的所有内容,等同于 cat file.txt。

在这里插入图片描述

2.2 打印特定字段
awk '{ print $1 }' file.txt

打印 file.txt 每一行的第一个字段(字段默认由空白字符分隔)。

在这里插入图片描述

2.3 汇总字段值
awk '{ sum += $1 } END { print sum }' file.txt

这将累加 file.txt 中每一行的第一个字段值,并在最后打印总和。
在这里插入图片描述

2.4 按条件过滤并打印
awk '$1 > 100' file.txt

仅打印 file.txt 中第一个字段值大于 100 的行。

2.5 打印行号
awk '{ print NR, $0 }' file.txt

这将打印文件的每一行及其行号。

2.6 文本替换并输出到文件
awk '{ gsub(/old/, "new"); print }' file.txt > out.txt

在这里插入图片描述

2.7 使用内置变量

Awk命令还提供了许多内置函数,可以用于字符串操作、数学计算等。下面的例子演示了如何使用内置函数计算文件中所有数字的总和:

`awk '{sum += $1} END {print "Sum:", sum}' data.txt`

在这里插入图片描述

2.8 格式化输出
awk 'BEGIN { printf "%-10s %s\n", "Name", "Address" } { printf "%-10s %s\n", $1, $2 }' file.txt

这将以格式化的方式打印 “Name” 和 “Address” 标题,接着打印每一行的第一和第二字段。
在这里插入图片描述

3.SED

sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。它以一次处理一行数据的方式工作,并且通常用于管道操作中。以下是 sed 的一些常见用法和示例:

3.1 替换文本

sed 's/old/new/' file.txt

这将在 file.txt 的每一行中替换第一次出现的 “old” 为 “new”。
在这里插入图片描述

3.2 全局替换
sed 's/old/new/g' file.txt

这不仅替换每行中第一次出现的 “old”,而是替换每一次出现的 “old”。

在这里插入图片描述

3.3 替换指定行
sed '2 s/old/new/' file.txt

在这里插入图片描述

3.4. 删除行
sed '3 d' file.txt

删除 file.txt 中的第三行。

在这里插入图片描述

3.5 将结果输出到文件
sed 's/old/new/g' file.txt > output.txt

将替换操作的结果输出到 output.txt 文件中。

在这里插入图片描述

3.6 原地编辑文件(会更改源文件)
sed -i 's/old/new/g' file.txt

注意:使用 -i 参数可以直接在源文件上进行操作,替换所有 “old” 为 “new”。

3.7 追加(a)、插入(i)和更改(c)文本
sed '4 a This is a new line' file.txt

在文件 file.txt 的第四行之后追加一行 “This is a new line”。

3.8 在文件 file.txt 的第四行之前插入一行 “This is a new line”。
sed '4 c This is a new line' file.txt

替换文件 file.txt 的第四行内容为 “This is a new line”。

在这里插入图片描述

3.9 使用正则表达式
sed -n '/pattern/p' file.txt

打印所有包含 “pattern” 的行。

在这里插入图片描述

3.10 多点编辑
sed -e 's/old/new/' -e 's/start/end/' file.txt

同时进行多个编辑操作,这里替换 “old” 为 “new”,并且替换 “start” 为 “end”。

3.11 从文件中读取脚本执行
sed -f test.sed file.txt

4. 总结:

grep
用途:搜索特定模式(可以是正则表达式)并输出匹配的行。
主要特点:
支持基本和扩展的正则表达式。
可以递归地搜索目录。
支持多文件搜索。
包含多种实用选项,如忽略大小写 (-i),计数匹配行 (-c),只显示文件名 (-l),反转匹配 (-v) 等。
awk
用途:是一种编程语言,用于数据提取和报告生成。
主要特点:
擅长按列处理数据,字段默认由空白字符分隔。
支持内置变量和函数,如行号 (NR),字段数 (NF),计算函数等。
允许对数据进行复杂的操作,支持条件语句和循环。
可以使用模式匹配来选择性地执行动作。
sed
用途:流编辑器,用于基于模式的文本转换。
主要特点:
主要用于文本替换、删除、插入和提取。
支持基本的正则表达式。
可以原地编辑文件 (-i) 实现直接更改源文件。
虽然功能强大,但一般用于较为简单的文本操作

组合使用:
在实际应用中,grep,awk 和 sed 常常结合使用来完成复杂的文本处理任务。例如,你可以先用 grep 过滤出包含特定模式的行,然后用 awk 来处理这些行,并用 sed 进行最终的文本替换。

grep "pattern" file.txt | awk '{print $2}' | sed 's/abc/def/'

这个管道命令首先会从 file.txt 中找到所有包含 “pattern” 的行,然后提取这些行的第二个字段,最后将这些字段中的 “abc” 替换为 “def”。
掌握这三个工具将极大地增强你在命令行上处理文本数据的能力。
在这里插入图片描述

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

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

相关文章

国内ip地址随意更换的潜在风险和策略

在数字化时代&#xff0c;IP地址是互联网通信的基础&#xff0c;而国内IP地址的随意更换可能带来一系列安全风险和问题。虎观代理小二将探讨国内IP地址随意更换的潜在影响以及如何有效应对这一挑战。 1.什么是国内IP地址&#xff1f; 国内IP地址是指在国内分配和使用的IP地址&…

边缘计算基础介绍及AKamai-linode产品分析

1、背景 随着互联网的发展&#xff0c;我们进入了大数据时代&#xff0c;这个时代也是移动互联网的时代&#xff0c;而且这个时代&#xff0c;大量的线下服务走到线上&#xff0c;随之而来的&#xff0c;比如外卖、叫车……于是&#xff0c;有各种各样的 App 和设备在收集你的…

对尾递归的理解,有哪些应用场景

文章目录 一、递归二、尾递归二、应用场景参考文献 一、递归 递归&#xff08;英语&#xff1a;Recursion&#xff09; 在数学与计算机科学中&#xff0c;是指在函数的定义中使用函数自身的方法 在函数内部&#xff0c;可以调用其他函数。如果一个函数在内部调用自身本身&am…

电子电器架构 —— 诊断数据DTC具体故障

电子电器架构 —— 诊断数据DTC具体故障 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师 (Wechat:gongkenan2013)。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 本就是小人物,输了就是输了,不要在意别人怎么看自己。江湖一碗茶,喝完再挣…

qt5-入门-标签页部件QTabWidget-2-新增和删除标签页

参考&#xff1a; C GUI Programming with Qt 4, Second Edition 本地环境&#xff1a; win10专业版&#xff0c;64位&#xff0c;Qt5.12 上一篇&#xff1a; qt5-入门-标签页部件QTabWidget-1-CSDN博客 https://blog.csdn.net/pxy7896/article/details/136883359 目录 效果实…

机器学习之线性回归与逻辑回归【完整房价预测和鸢尾花分类代码解释】

目录 前言 一、什么是线性回归 二、什么是逻辑回归 三、基于Python 和 Scikit-learn 库实现线性回归 示例代码&#xff1a; 使用线性回归来预测房价: 四、基于Python 和 Scikit-learn 库实现逻辑回归 五、总结 线性回归的优缺点总结&#xff1a; 逻辑回归&#xff08;Logistic…

WiFi已连接却不可上网是什么原因?

很多使用wifi上网的用户都遇到过这样的问题,就是电脑已经连接了wifi,但就是上不了网。着到底是怎么回事呢?今天,极客狗带大家一起来找找WiFi已连接却不可上网是什么原因,并给出对应的解决方。 原因分析: 可能是ip地址冲突所导致,也有可能是宽带出先故障,不妨试试下面的…

零基础入门数据挖掘系列之「特征工程」

摘要&#xff1a;对于数据挖掘项目&#xff0c;本文将学习应该从哪些角度做特征工程&#xff1f;从哪些角度做数据清洗&#xff0c;如何对特征进行增删&#xff0c;如何使用PCA降维技术等。 特征工程&#xff08;Feature Engineering&#xff09;对特征进行进一步分析&#xf…

Python - 深度学习系列30 - 使用LLaMA-Factory微调模型

说明 最实用的一种利用大语言模型的方式是进行微调。预训练模型与我们的使用场景一定会存在一些差异&#xff0c;而我们又不可能重头训练。 微调的原理并不复杂&#xff0c;载入模型&#xff0c;灌新的数据&#xff0c;然后运行再训练&#xff0c;保留checkpoints。但是不同项…

ExoPlayer架构详解与源码分析(12)——Cache

系列文章目录 ExoPlayer架构详解与源码分析&#xff08;1&#xff09;——前言 ExoPlayer架构详解与源码分析&#xff08;2&#xff09;——Player ExoPlayer架构详解与源码分析&#xff08;3&#xff09;——Timeline ExoPlayer架构详解与源码分析&#xff08;4&#xff09;—…

华为配置AP静态上线业务实验

配置AP静态上线业务示例 组网图形 图1 配置AP静态上线业务示例组网图 业务需求组网需求数据规划配置思路操作步骤配置文件扩展阅读 业务需求 管理员希望为AP配置静态IP地址&#xff0c;使AP能够找到正确的AC&#xff0c;当AP通过AC的认证后&#xff0c;实现AP在AC中正常上…

C++项目——集群聊天服务器项目(四)MySQL数据库

今天来介绍集群聊天器项目中MySQL数据库的相关表结构 集群聊天服务器项目需要进行好友、群组的增删操作以及好友离线状态的判断&#xff0c;需要在数据库中建立相关表进行增删改查操作&#xff0c;因此项目设计了如下五个表&#xff0c;大家可以自己动动小手&#xff0c;使用S…

机器学习——元学习

元学习&#xff08;Meta Learning&#xff09;是一种机器学习方法&#xff0c;旨在使模型能够学习如何学习。它涉及到在学习过程中自动化地学习和优化学习算法或模型的能力。元学习的目标是使模型能够从有限的训练样本中快速适应新任务或新环境。 在传统的机器学习中&#xff…

海外媒体宣发:十大国外中文网站-大舍传媒

十大国外中文网站 1、欧洲时报 覆盖欧洲且较具影响力的华文媒体 国外中文新闻网站&#xff0c;欧洲时报文化传媒集团旗舰日报《欧洲时报》旗下官方网站&#xff0c;总部设在法国巴黎&#xff0c;创刊于1983年&#xff0c;现已成为唯一发行覆盖全欧、发行量最大、最具影响力的华…

发展规划--IM系统

1、时代背景 5G应用&#xff0c;多终端应用&#xff0c;物联网应用&#xff0c;小程序&#xff0c;工业互联&#xff0c;大数据应用等等大前端时代的到来&#xff0c;程序员不能只关注crud&#xff0c;因为以后的服务并发量只会越来越多。 高并发架构师、大数据架构师或者说j…

国内ip地址怎么改?详解修改ip地址的步骤

在网络通信中&#xff0c;IP地址是设备在网络上的标识&#xff0c;对于用户、服务器和网络安全都至关重要。然而&#xff0c;有时候在特定情况下&#xff0c;可能需要修改IP地址以满足不同需求或解决特定问题。虎观代理小二将深入研究中国国内IP地址修改的方法与影响&#xff0…

C++ explicit隐式类型转换

单参数构造函数支持隐式类型的转换 什么意思&#xff1f; 简单来理解就是&#xff1a; 一个类对象的构造函数的参数只有一个&#xff0c;就可以直接进行赋值传参 例如构造函数的参数为int&#xff0c;且只有一个int 就可以直接将int类型的整型数据转换成类对象 也就是说从int类…

Unity构建详解(3)——SBP的依赖计算

【前置知识】 先要搞清楚Asset和Object的关系&#xff0c;可以简单理解为一个Asset对应多个Object。 unity自定义的Asset也要有一个存储的标准&#xff0c;其采用的是YAML&#xff0c;我们看到的所有Unity自定义的Asset格式&#xff0c;例如.prefab&#xff08;预制体&#x…

研华工控机610L学习笔记2:visualstudio与第一个C#程序

今日继续学习工控机 C# 编程相关知识&#xff1a; 这篇结束后我将先进行一段时间的C#的学习研究&#xff0c;并写一些C#的笔记 后续再更新工控机编程设计相关 目录 1、安装visualstudio&#xff1a; 2、创建第一个C#程序&#xff1a; 3、寻找C#解决方案源文件&#xff1a; …

linux之zabbix自定义监控

zabbix基本配置见&#xff1a;写文章-CSDN创作中心https://mp.csdn.net/mp_blog/creation/editor/136783672 自定义监控规则 命令为who | wc -l 显示为2&#xff0c;主机一个&#xff0c;mobaxterm一个&#xff0c;思路是开启3个终端&#xff0c;让主机的zabbix服务自动检测1…