6 - Shell编程之sed与awk编辑器

2024-09-05 03:36
文章标签 编辑器 编程 shell awk sed

本文主要是介绍6 - Shell编程之sed与awk编辑器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一、sed

1.概述

2.sed命令格式

3.常用操作的语法演示

3.1 输出符合条件的文本

3.2 删除符合条件的文本

3.3 替换符合条件的文本

3.4 插入新行

二、awk

1.概述

2. awk命令格式

3.awk工作过程

4.awk内置变量

5.awk用法示例

5.1 按行输出文本

5.2 按字段输出文本


一、sed

1.概述

sed是一个强大的文本处理工具,其名称是Stream Editor(流编辑器)的缩写。它被设计用于根据用户定义的规则对文本进行逐行处理和转换。

Sed通过从输入流中逐行读取文本,并根据用户指定的命令来对每一行进行处理。

2.sed命令格式

sed "选项" "操作语法" "参数"

常用选项解释
-n不进行打印输出
-i直接对源文件进行编辑
-f表示用指定的脚本文件来处理输入的文本文件
-r使用扩展正则表达式
-e多点编辑

常用操作语法解释
s替换指定字符
d删除指定行
a指定行下方插入行
i指定行上方插入行
c替换指定行
y字符转换,转换前后字符长度必须相同
p打印

3.常用操作的语法演示

3.1 输出符合条件的文本

例:

sed -n 'p' a.txt    #输出所有内容
sed -n '3p' a.txt    #输出第三行
sed -n '3,5p' a.txt    #输出第三到五行
sed -n '3p;5p' a.txt    #输出第三行和第五行
sed -n 'p;n' a.txt    #输出所有奇数行(输出一行隔一行再输出)
sed -n 'n;p' a.txt    #输出所有偶数行(隔一行输出再隔一行输出)
sed -n '3,9p;n' a.txt    #输出三到九行之间的奇数行
sed -n 'n;3,9p' a.txt    #输出三到九行之间的偶数行
sed -n '/word/p' a.txt    #输出包含"word"的行
sed -n '/abc/,/123/p' a.txt    #输出包含"abc"与"123"之间的行
sed -n '/abc/p;/123/p' a.txt    #输出包含"abc"或者包含"123"的行

3.2 删除符合条件的文本

sed '3d' a.txt    #删除第三行
sed '3,5d' a.txt    #删除第三到五行
sed '/word/d' a.txt    #删除包含word的行
sed '/word/!d' a.txt    #删除不包含word的行
......

3.3 替换符合条件的文本

sed 's/abc/123/' a.txt    #将每行第一个"abc"替换为"123"
sed 's/abc/123/g' a.txt    #全局替换g=global,将所有"abc"替换为"123"
sed 's/#//g' a.txt    #将所有"#"替换为空字符
sed 's/^/#/ a.txt    #将每行行首插入"#"
sed '3s/word/abc/ a.txt    #将第三行中的"word"替换为"abc"
sed '3,5s/word/abc/ a.txt    #将第三到五行中的"word"替换为"abc"
sed '/abc/,/123/s/word/num/ a.txt    #将包含"abc"和"123"之间的行的"word"替换为"num"
......

3.4 插入新行

sed '/word/a123' a.txt    #在所有包含"word"的行下方插入行"123"
sed '/word/i123' a.txt    #在所有包含"word"的行上方方插入行"123"
sed '3a123' a.txt    #在第三行下方插入行"123"
sed '3i123' a.txt    #在第三行上方插入行"123"

二、awk

1.概述

在 Linux/UNIX 系统中,awk 是一个功能强大的编辑工具,逐行读取输入文本,默认以空格或tab键作为分隔符作为分隔,并按模式或者条件执行编辑命令。

2. awk命令格式

awk  选项 '操作符 {编辑指令}' 处理对象

  • { }外指定条件,{ }内指定操作

3.awk工作过程

  1. 执行BEGIN{action;… }语句块中的语句。
  2. 从文件或标准输入(stdin)读取一行,然后执行pattern{ action;… }语句块,它逐行扫描文件,从第一行到最后一行重复这个过程,直到文件全部被读取完毕。
  3. 当读至输入流末尾时,执行END{action;…}语句块
  • BEGIN语句块在awk开始从输入流中读取行之前被执行,这是一个可选的语句块,比如变量初始化、打印输出表格的表头等语句通常可以写在BEGIN语句块中
  • END语句块在awk从输入流中读取完所有的行之后即被执行,比如打印所有行的分析结果这类信息汇总都是在END语句块中完成,它也是一个可选语句块

4.awk内置变量

内置变量解释
FS指定每行文本的字段分隔符,默认为空格或制表位(tab)
NF当前处理的行的字段个数
NR当前处理的行的行号
$0当前处理的行的整行内容
$n当前处理行的第 n 个字段(第 n 列)
OFS输出内容的列分隔符
FILENAME被处理的文件名
RS行分隔符

5.awk用法示例

5.1 按行输出文本

awk '{print}' a.txt    #输出所有内容,类似于cat
awk '{print $0}' a.txt    #同上,"$0"代表整行内容
awk '{print NR}' a.txt    #打印行号
awk '{print NR,$0}' a.txt   #打印行号+所有内容
awk 'NR==3{print}' a.txt    #打印第三行内容
awk 'NR==3,NR==5{print}' a.txt    #打印第三到五行内容
awk '(NR>=3)&&(NR<=5){print}' a.txt    #同上
awk 'NR==3;NR==5{print}' a.txt    #打印第三行和第五行内容
awk 'NR%2==0{print}' a.txt    #打印偶数行内容
awk 'NR%2==1{print}' a.txt    #打印奇数行内容
awk '/^word/{print}' a.txt    #打印以"word"开头的行
awk '/word$/{print}' a.txt    #打印以"word"结尾的行

5.2 按字段输出文本

awk '{print $3}' a.txt    #打印每行第三个字段(列)的内容
awk '{print $3,$5}' a.txt    #打印每行第三列和第五列的内容
awk -F: '{print $3}' a.txt    #打印以":"作为分隔符,每行第三个字段的内容
awk -F: '$3>10{print}' a.txt    #打印以":"为分隔符,第三个字段大于10的每行内容
awk '{if($3>10){print}}' a.txt    #同上
awk '$5~"word"{print $3,$NF}' a.txx    #打印第五字段包含"word"所在行的第三个字段和最后一个字段
awk '($3=="word")&&($5=="name"){print}'    #打印第三个字段为"word"且第五个字段为"name"的行

这篇关于6 - Shell编程之sed与awk编辑器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1137843

相关文章

shell编程之函数与数组的使用详解

《shell编程之函数与数组的使用详解》:本文主要介绍shell编程之函数与数组的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录shell函数函数的用法俩个数求和系统资源监控并报警函数函数变量的作用范围函数的参数递归函数shell数组获取数组的长度读取某下的

使用Python开发一个带EPUB转换功能的Markdown编辑器

《使用Python开发一个带EPUB转换功能的Markdown编辑器》Markdown因其简单易用和强大的格式支持,成为了写作者、开发者及内容创作者的首选格式,本文将通过Python开发一个Markd... 目录应用概览代码结构与核心组件1. 初始化与布局 (__init__)2. 工具栏 (setup_t

SpringShell命令行之交互式Shell应用开发方式

《SpringShell命令行之交互式Shell应用开发方式》本文将深入探讨SpringShell的核心特性、实现方式及应用场景,帮助开发者掌握这一强大工具,具有很好的参考价值,希望对大家有所帮助,如... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定

Spring Shell 命令行实现交互式Shell应用开发

《SpringShell命令行实现交互式Shell应用开发》本文主要介绍了SpringShell命令行实现交互式Shell应用开发,能够帮助开发者快速构建功能丰富的命令行应用程序,具有一定的参考价... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定义S

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.

Java并发编程必备之Synchronized关键字深入解析

《Java并发编程必备之Synchronized关键字深入解析》本文我们深入探索了Java中的Synchronized关键字,包括其互斥性和可重入性的特性,文章详细介绍了Synchronized的三种... 目录一、前言二、Synchronized关键字2.1 Synchronized的特性1. 互斥2.

Python异步编程中asyncio.gather的并发控制详解

《Python异步编程中asyncio.gather的并发控制详解》在Python异步编程生态中,asyncio.gather是并发任务调度的核心工具,本文将通过实际场景和代码示例,展示如何结合信号量... 目录一、asyncio.gather的原始行为解析二、信号量控制法:给并发装上"节流阀"三、进阶控制

shell脚本自动删除30天以前的文件(最新推荐)

《shell脚本自动删除30天以前的文件(最新推荐)》该文章介绍了如何使用Shell脚本自动删除指定目录下30天以前的文件,并通过crontab设置定时任务,此外,还提供了如何使用Shell脚本删除E... 目录shell脚本自动删除30天以前的文件linux按照日期定时删除elasticsearch索引s

C#多线程编程中导致死锁的常见陷阱和避免方法

《C#多线程编程中导致死锁的常见陷阱和避免方法》在C#多线程编程中,死锁(Deadlock)是一种常见的、令人头疼的错误,死锁通常发生在多个线程试图获取多个资源的锁时,导致相互等待对方释放资源,最终形... 目录引言1. 什么是死锁?死锁的典型条件:2. 导致死锁的常见原因2.1 锁的顺序问题错误示例:不同

PyCharm接入DeepSeek实现AI编程的操作流程

《PyCharm接入DeepSeek实现AI编程的操作流程》DeepSeek是一家专注于人工智能技术研发的公司,致力于开发高性能、低成本的AI模型,接下来,我们把DeepSeek接入到PyCharm中... 目录引言效果演示创建API key在PyCharm中下载Continue插件配置Continue引言