Linux 文本处理三剑客基本用法

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

在这里插入图片描述

1. 基本用法

grep 是一种强大的文本搜索工具,用于在文件中搜索指定的模式(通常是字符串或正则表达式),并输出匹配的行。以下是 grep 的一些基本用法:

基本语法

grep [选项] 模式 [文件...]

常用选项

  • -i:忽略大小写。
  • -v:反向选择,显示不包含匹配模式的行。
  • -c:计算匹配的行数。
  • -l:显示包含匹配模式的文件名。
  • -L:显示不包含匹配模式的文件名。
  • -n:显示匹配的行号。
  • -H:显示文件名(在搜索多个文件时默认启用)。
  • -h:不显示文件名(在搜索多个文件时)。
  • -r-R:递归搜索目录中的文件。
  • -w:只匹配整个单词。
  • -x:只匹配整行。
  • -A NUM:显示匹配行及其后 NUM 行。
  • -B NUM:显示匹配行及其前 NUM 行。
  • -C NUM:显示匹配行及其前后各 NUM 行。
  • -E--extended-regexp:使用扩展正则表达式。
  • -F--fixed-strings:将模式视为固定字符串(不使用正则表达式)。
  • -P--perl-regexp:使用 Perl 兼容正则表达式。

模式

模式可以是简单的字符串,也可以是正则表达式。

示例

  1. 在文件中搜索字符串 “hello”:
grep "hello" filename.txt
  1. 忽略大小写搜索 “hello”:
grep -i "hello" filename.txt
  1. 显示包含 “hello” 的文件名:
grep -l "hello" *.txt
  1. 递归搜索目录中的所有文件(包括子目录):
grep -r "hello" /path/to/directory
  1. 显示匹配 “hello” 的行号:
grep -n "hello" filename.txt
  1. 显示匹配 “hello” 的行及其后两行:
grep -A 2 "hello" filename.txt
  1. 使用扩展正则表达式搜索模式(例如,匹配以 “foo” 开头,后跟任意字符,再以 “bar” 结尾的字符串):
grep -E "^foo.*bar$" filename.txt

请注意,grep 的输出通常默认会打印到标准输出(通常是终端或控制台)。如果你希望将输出保存到文件中,可以使用重定向操作符 >,例如:

grep "hello" filename.txt > output.txt

这样,grep 的输出就会被保存到 output.txt 文件中,而不是显示在终端上。

在这里插入图片描述

2. sed

sed 是一款流式文本编辑器,它允许你对文本进行过滤和转换。以下是 sed 的基本用法和一些常见操作的示例:

基本语法

sed [option] '地址定位+sed指令' filename
  • option:sed命令的选项,用于控制sed的行为。
  • 地址定位:决定对哪些行进行编辑。可以是行号、正则表达式或空(表示所有行)。
  • sed指令:指定要对匹配的行执行的操作,如打印、删除、替换等。
  • filename:要处理的文件名。

常用选项

  • -r--regexp-extended:启用扩展正则表达式。
  • -e:允许在同一命令行上执行多个脚本。
  • -n:取消默认输出,只输出处理过的行。
  • -i:直接修改文件内容,而不是输出到标准输出。

地址定位

  • 行号:如 1 表示第一行,$ 表示最后一行。
  • 正则表达式:如 /pattern/ 表示匹配包含该模式的行。
  • 空:表示对所有行进行操作。

常见指令

  • p:打印匹配的行。
  • d:删除匹配的行。
  • s:替换匹配的内容。格式为 s/原字符串/新字符串/[修饰符]
  • i:在匹配行前插入新行。
  • a:在匹配行后追加新行。
  • c:替换匹配行。

示例

  1. 打印文件内容(默认行为,通常不需要使用 -p,除非与 -n 结合使用):
sed '' filename

sed -n 'p' filename
  1. 删除第一行
sed '1d' filename
  1. 删除最后一行
sed '$d' filename
  1. 删除第2到第4行
sed '2,4d' filename
  1. 打印第2到第4行
sed -n '2,4p' filename
  1. 替换所有 “foo” 为 “bar”
sed 's/foo/bar/g' filename
  1. 在包含 “pattern” 的行前插入 “new line”
sed '/pattern/i\new line' filename
  1. 在包含 “pattern” 的行后追加 “new line”
sed '/pattern/a\new line' filename
  1. 使用扩展正则表达式(例如,匹配以 “foo” 开头的行):
sed -r '/^foo/' filename
  1. 直接修改文件(将 “foo” 替换为 “bar” 并保存到原文件):
sed -i 's/foo/bar/g' filename

请注意,sed 的操作是基于流的,这意味着它逐行处理输入数据。因此,对于大型文件,sed 通常比逐行读取和处理文件的脚本更高效。

在这里插入图片描述

3. awk

awk 是一个强大的文本处理工具,它特别适用于对列式数据进行处理和分析。以下是 awk 的基本用法和一些常见的示例:

基本语法

awk 'pattern { action }' input-file
  • pattern:这是可选的,表示要搜索的模式。如果省略,awk 会对每一行都执行 action
  • action:这是 awk 执行的命令,用花括号 {} 包围。
  • input-file:这是 awk 要处理的输入文件。

常见选项

  • -F fs:指定输入字段分隔符为 fs
  • -v var=value:在 awk 程序中设置一个变量及其值。
  • -f program-file:从指定的文件中读取 awk 程序。

内建变量

  • $0:整行文本。
  • $1, $2, ...:每行的第一个、第二个等字段。
  • NF:字段数量。
  • NR:当前记录(行)号。
  • FS:输入字段分隔符(默认为空格或制表符)。
  • OFS:输出字段分隔符(默认为空格)。

示例

  1. 打印文件的所有行

    awk '{ print }' input.txt
    

    这实际上与 cat input.txt 相同,但 awk 更适合进行更复杂的文本处理。

  2. 打印文件的特定字段

    awk '{ print $1, $3 }' input.txt
    

    这将打印每行的第一个和第三个字段。

  3. 使用字段分隔符

    如果字段由逗号分隔,可以使用 -F 选项:

    awk -F, '{ print $1, $3 }' input.csv
    
  4. 条件匹配

    awk '$3 > 100 { print $1, $3 }' input.txt
    

    这将打印第三个字段大于100的行的第一个和第三个字段。

  5. 设置输出字段分隔符

    awk 'BEGIN { OFS="," } { print $1, $3 }' input.txt
    

    这将使用逗号作为输出字段分隔符。

  6. 使用变量

    awk -v threshold=100 '$3 > threshold { print $1, $3 }' input.txt
    

    这里,threshold 是一个变量,其值在 awk 程序外部设置。

  7. 从文件中读取 awk 程序

    awk -f script.awk input.txt
    

    script.awk 文件包含要执行的 awk 程序。

注意事项

  • awk 程序中的花括号 {} 内的语句应该以分号 ; 或换行符分隔。
  • BEGIN 块中,可以在处理任何输入行之前执行初始化代码。
  • END 块中,可以在处理完所有输入行之后执行清理代码。

awk 是一个功能非常强大的工具,上述只是其基本用法的介绍。通过组合不同的模式和动作,awk 可以用于解决各种复杂的文本处理任务。

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

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

相关文章

解决 Maven 部署中的 Artifact 覆盖问题:实战经验分享20241204

🛠️ 解决 Maven 部署中的 Artifact 覆盖问题:实战经验分享 📌 引言 在软件开发过程中,持续集成和持续部署(CI/CD)是提高开发效率和代码质量的关键手段。Hudson 和 Maven 是两种广泛使用的工具&#xff0…

3DMAX星空图像生成器插件使用方法详解

3DMAX星空图像生成器插件,一键生成星空或夜空的二维图像。它可用于创建天空盒子或空间场景,或作为2D艺术的天空背景。 【主要特点】 -单击即可创建星空图像或夜空。 -星数、亮度、大小、形状等参数。 -支持任何图像大小(方形)。…

Linux权限机制深度解读:系统安全的第一道防线

文章目录 前言‼️一、Linux权限的概念‼️二、Linux权限管理❕2.1 文件访问者的分类(人)❕2.2 文件类型和访问权限(事物属性)✔️1. 文件类型✔️2. 基本权限✔️3. 权限值的表示方法 ❕2.3 文件访问权限的相关设置方法✔️1. ch…

C# 动态类型 Dynamic

文章目录 前言1. 什么是 Dynamic?2. 声明 Dynamic 变量3. Dynamic 的运行时类型检查4. 动态类型与反射的对比5. 使用 Dynamic 进行动态方法调用6. Dynamic 与 原生类型的兼容性7. 动态与 LINQ 的结合8. 结合 DLR 特性9. 动态类型的性能考虑10. 何时使用 Dynamic&…

Python毕业设计选题:基于大数据的淘宝电子产品数据分析的设计与实现-django+spark+spider

开发语言:Python框架:djangoPython版本:python3.7.7数据库:mysql 5.7数据库工具:Navicat11开发软件:PyCharm 系统展示 管理员登录 管理员功能界面 电子产品管理 系统管理 数据可视化分析看板展示 摘要 本…

用 NotePad++ 运行 Java 程序

安装包 网盘链接 下载得到的安装包: 安装步骤 双击安装包开始安装. 安装完成: 配置编码 用 NotePad 写 Java 程序时, 需要设置编码. 在 设置, 首选项, 新建 中进行设置, 可以对每一个新建的文件起作用. 之前写的文件不起作用. 在文件名处右键, 可以快速打开 CMD 窗口, 且路…

vxe-table 树形表格序号的使用

vxe-table 树形结构支持多种方式的序号&#xff0c;可以及时带层级的序号&#xff0c;也可以是自增的序号。 官网&#xff1a;https://vxetable.cn 带层级序号 <template><div><vxe-grid v-bind"gridOptions"></vxe-grid></div> <…

SQL SERVER 2016 AlwaysOn 无域集群+负载均衡搭建与简测

之前和很多群友聊天发现对2016的无域和负载均衡满心期待&#xff0c;毕竟可以简单搭建而且可以不适用第三方负载均衡器&#xff0c;SQL自己可以负载了。windows2016已经可以下载使用了&#xff0c;那么这回终于可以揭开令人憧憬向往的AlwaysOn2016 负载均衡集群的神秘面纱了。 …

Groom Blender to UE5

Groom Blender to UE5 - Character & Animation - Epic Developer Community Forums Hello, 你好&#xff0c; While exporting my “groom” from blender to UE5, I notice that the curves have a minimal resolution in Unreal. However I would like to get the same …

TCP/IP协议图--TCP/IP基础

1. TCP/IP 的具体含义 从字面意义上讲&#xff0c;有人可能会认为 TCP/IP 是指 TCP 和 IP 两种协议。实际生活当中有时也确实就是指这两种协议。然而在很多情况下&#xff0c;它只是利用 IP 进行通信时所必须用到的协议群的统称。具体来说&#xff0c;IP 或 ICMP、TCP 或 UDP、…

R语言机器学习论文(二):数据准备

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载R包数据下载导入数据一、数据描述二、数据预处理(一)修改元素名称(二)剔除无关变量(三)缺失值检查(四)重复值检查(五)异常值检查三、描述性统计(一)连续变量数据情…

【算法】【优选算法】位运算(下)

目录 一、&#xff1a;⾯试题 01.01.判定字符是否唯⼀1.1 位图1.2 hash思路1.3 暴力枚举 二、268.丢失的数字2.1 位运算&#xff0c;异或2.2 数学求和 三、371.两整数之和四、137.只出现⼀次的数字 II五、⾯试题 17.19.消失的两个数字 一、&#xff1a;⾯试题 01.01.判定字符是…

【Docker】针对开发环境、测试环境、生产环境如何编排?

目录 一、引言 二、Docker Compose 文件基础 三、针对不同环境的 Docker 编排 开发环境 测试环境 生产环境 四、配置文件全局变量的编写 五、总结 一、引言 在软件开发和部署的过程中&#xff0c;不同的环境有着不同的需求和配置。Docker 作为一种强大的容器化技术&…

Flink:入门介绍

目录 一、Flink简介 2.1 Flink 架构 2.2 Flink 应用程序 运行模式 二、Flink 集群 部署 2.1 本地集群模式 2.1.1 安装JDK​编辑 2.1.2 下载、解压 Flink 2.1.3 启动集群 2.1.4 停止集群 2.2 Standalone 模式 2.2.0 集群规划 2.2.1 安装JDK 2.2.2 设置免密登录 2…

【RDMA】RDMA read和write编程实例(verbs API)

WRITE|READ编程&#xff08;RDMA read and write with IB verbs&#xff09; &#xff08;本文讲解的示例代码在&#xff1a;RDMA read and write with IB verbs | The Geek in the Corner&#xff09; 将 RDMA 与verbs一起使用非常简单&#xff1a;首先注册内存块&#xff0c…

洛谷P2670扫雷游戏(Java)

三.P2670 [NOIP2015 普及组] 扫雷游戏 题目背景 NOIP2015 普及组 T2 题目描述 扫雷游戏是一款十分经典的单机小游戏。在 n 行 m列的雷区中有一些格子含有地雷&#xff08;称之为地雷格&#xff09;&#xff0c;其他格子不含地雷&#xff08;称之为非地雷格&#xff09;。玩…

泷羽sec专题课笔记-- Linux作业--开机自启动方法以及破解

本笔记为 泷羽sec 《红队全栈课程》学习笔记&#xff0c;课程请可自行前往B站学习&#xff0c;课程/笔记主要涉及网络安全相关知识、系统以及工具的介绍等&#xff0c;请使用该课程、本笔记以及课程和笔记中提及工具的读者&#xff0c;遵守网络安全相关法律法规&#xff0c;切勿…

Linux内核早期打印机制与RS485通信技术

往期内容 本专栏往期内容&#xff1a;Uart子系统 UART串口硬件介绍深入理解TTY体系&#xff1a;设备节点与驱动程序框架详解Linux串口应用编程&#xff1a;从UART到GPS模块及字符设备驱动 解UART 子系统&#xff1a;Linux Kernel 4.9.88 中的核心结构体与设计详解IMX 平台UART驱…

汽车网络安全 -- IDPS如何帮助OEM保证车辆全生命周期的信息安全

目录 1.强标的另一层解读 2.什么是IDPS 2.1 IDPS技术要点 2.2 车辆IDPS系统示例 3.车辆纵深防御架构 4.小结 1.强标的另一层解读 在最近发布的国家汽车安全强标《GB 44495》,在7.2节明确提出了12条关于通信安全的要求,分别涉及到车辆与车辆制造商云平台通信、车辆与车辆…

如何利用内链策略提升网站的整体权重?

内链是谷歌SEO中常常被低估的部分&#xff0c;实际上&#xff0c;合理的内链策略不仅能帮助提升页面间的关联性&#xff0c;还可以增强网站的整体权重。通过正确的内链布局&#xff0c;用户可以更流畅地浏览你的网站&#xff0c;谷歌爬虫也能更快地抓取到更多页面&#xff0c;有…