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

相关文章

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的核心概念

函数式编程思想

我们经常会用到各种各样的编程思想,例如面向过程、面向对象。不过笔者在该博客简单介绍一下函数式编程思想. 如果对函数式编程思想进行概括,就是f(x) = na(x) , y=uf(x)…至于其他的编程思想,可能是y=a(x)+b(x)+c(x)…,也有可能是y=f(x)=f(x)/a + f(x)/b+f(x)/c… 面向过程的指令式编程 面向过程,简单理解就是y=a(x)+b(x)+c(x)

Java并发编程之——BlockingQueue(队列)

一、什么是BlockingQueue BlockingQueue即阻塞队列,从阻塞这个词可以看出,在某些情况下对阻塞队列的访问可能会造成阻塞。被阻塞的情况主要有如下两种: 1. 当队列满了的时候进行入队列操作2. 当队列空了的时候进行出队列操作123 因此,当一个线程试图对一个已经满了的队列进行入队列操作时,它将会被阻塞,除非有另一个线程做了出队列操作;同样,当一个线程试图对一个空

jenkins 插件执行shell命令时,提示“Command not found”处理方法

首先提示找不到“Command not found,可能我们第一反应是查看目标机器是否已支持该命令,不过如果相信能找到这里来的朋友估计遇到的跟我一样,其实目标机器是没有问题的通过一些远程工具执行shell命令是可以执行。奇怪的就是通过jenkinsSSH插件无法执行,经一番折腾各种搜索发现是jenkins没有加载/etc/profile导致。 【解决办法】: 需要在jenkins调用shell脚

生信代码入门:从零开始掌握生物信息学编程技能

少走弯路,高效分析;了解生信云,访问 【生信圆桌x生信专用云服务器】 : www.tebteb.cc 介绍 生物信息学是一个高度跨学科的领域,结合了生物学、计算机科学和统计学。随着高通量测序技术的发展,海量的生物数据需要通过编程来进行处理和分析。因此,掌握生信编程技能,成为每一个生物信息学研究者的必备能力。 生信代码入门,旨在帮助初学者从零开始学习生物信息学中的编程基础。通过学习常用

rtmp流媒体编程相关整理2013(crtmpserver,rtmpdump,x264,faac)

转自:http://blog.163.com/zhujiatc@126/blog/static/1834638201392335213119/ 相关资料在线版(不定时更新,其实也不会很多,也许一两个月也不会改) http://www.zhujiatc.esy.es/crtmpserver/index.htm 去年在这进行rtmp相关整理,其实内容早有了,只是整理一下看着方