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

相关文章

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

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

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

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

Linux中shell解析脚本的通配符、元字符、转义符说明

《Linux中shell解析脚本的通配符、元字符、转义符说明》:本文主要介绍shell通配符、元字符、转义符以及shell解析脚本的过程,通配符用于路径扩展,元字符用于多命令分割,转义符用于将特殊... 目录一、linux shell通配符(wildcard)二、shell元字符(特殊字符 Meta)三、s

shell脚本快速检查192.168.1网段ip是否在用的方法

《shell脚本快速检查192.168.1网段ip是否在用的方法》该Shell脚本通过并发ping命令检查192.168.1网段中哪些IP地址正在使用,脚本定义了网络段、超时时间和并行扫描数量,并使用... 目录脚本:检查 192.168.1 网段 IP 是否在用脚本说明使用方法示例输出优化建议总结检查 1

C#反射编程之GetConstructor()方法解读

《C#反射编程之GetConstructor()方法解读》C#中Type类的GetConstructor()方法用于获取指定类型的构造函数,该方法有多个重载版本,可以根据不同的参数获取不同特性的构造函... 目录C# GetConstructor()方法有4个重载以GetConstructor(Type[]

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

【编程底层思考】垃圾收集机制,GC算法,垃圾收集器类型概述

Java的垃圾收集(Garbage Collection,GC)机制是Java语言的一大特色,它负责自动管理内存的回收,释放不再使用的对象所占用的内存。以下是对Java垃圾收集机制的详细介绍: 一、垃圾收集机制概述: 对象存活判断:垃圾收集器定期检查堆内存中的对象,判断哪些对象是“垃圾”,即不再被任何引用链直接或间接引用的对象。内存回收:将判断为垃圾的对象占用的内存进行回收,以便重新使用。

Go Playground 在线编程环境

For all examples in this and the next chapter, we will use Go Playground. Go Playground represents a web service that can run programs written in Go. It can be opened in a web browser using the follow

深入理解RxJava:响应式编程的现代方式

在当今的软件开发世界中,异步编程和事件驱动的架构变得越来越重要。RxJava,作为响应式编程(Reactive Programming)的一个流行库,为Java和Android开发者提供了一种强大的方式来处理异步任务和事件流。本文将深入探讨RxJava的核心概念、优势以及如何在实际项目中应用它。 文章目录 💯 什么是RxJava?💯 响应式编程的优势💯 RxJava的核心概念