linux中sed和awk有什么区别

发布时间 - 2022-05-11 00:00:00    点击率:
区别:1、sed是流编辑器,而awk是文本格式化工具,报告生成器;2、awk适合对文件进行抽取整理,sed适合对文件进行编辑;3、sed读取一行数据,会以行作为单位进行处理,而awk读取一行,会切割成字段,以字段(列)为单位,进行细节处理。

本教程操作环境:CentOS 6系统、Dell G3电脑。

awk

awk是一种程序语言,对文档资料的处理具有很强的功能。awk擅长从格式化报文或从一个大的文本文件中抽取数据。

awk 命令是逐行扫描文件(从第 1 行到最后一行),寻找含有目标文本的行,如果匹配成功,则会在该行上执行用户想要的操作;反之,则不对行做任何处理。

awk 命令的基本格式为:

awk [选项] '脚本命令' 文件名

此命令常用的选项以及各自的含义,如表 1 所示。

        表 1 awk 命令选项以及含义
                选项                 含义
                -F fs                 指定以 fs 作为输入行的分隔符,awk 命令默认分隔符为空格或制表符。
                -f file                 从脚本文件中读取 awk 脚本指令,以取代直接在命令行中输入指令。
                -v var=val                 在执行处理过程之前,设置一个变量 var,并给其设备初始值为 val。

awk 的强大之处在于脚本命令,它由 2 部分组成,分别为匹配规则和执行命令,如下所示:

'匹配规则{执行命令}'

这里的匹配规则,和 sed 命令中的 address 部分作用相同,用来指定脚本命令可以作用到文本内容中的具体行,可以使用字符串(比如 /demo/,表示查看含有 demo 字符串的行)或者正则表达式指定。另外需要注意的是,整个脚本命令是用单引号('')括起,而其中的执行命令部分需要用大括号({})括起来。

在 awk 程序执行时,如果没有指定执行命令,则默认会把匹配的行输出;如果不指定匹配规则,则默认匹配文本中所有的行。

举个简单的例子:

[root@localhost ~]# awk '/^$/ {print "Blank line"}' test.txt

在此命令中,/^$/ 是一个正则表达式,功能是匹配文本中的空白行,同时可以看到,执行命令使用的是 print 命令,此命令经常会使用,它的作用很简单,就是将指定的文本进行输出。因此,整个命令的功能是,如果 test.txt 有 N 个空白行,那么执行此命令会输出 N 个 Blank line。

sed

sed 命令采用的是流编辑模式,最明显的特点是,在 sed 处理数据之前,需要预先提供一组规则,sed 会按照此规则来编辑数据。

sed 会根据脚本命令来处理文本文件中的数据,这些命令要么从命令行中输入,要么存储在一个文本文件中,此命令执行数据的顺序如下:

  • 每次仅读取一行内容;

  • 根据提供的规则命令匹配并修改数据。注意,sed 默认不会直接修改源文件数据,而是会将数据复制到缓冲区中,修改也仅限于缓冲区中的数据;

  • 将执行结果输出。

当一行数据匹配完成后,它会继续读取下一行数据,并重复这个过程,直到将文件中所有数据处理完毕。

sed 命令的基本格式如下:

sed [选项] [脚本命令] 文件名

该命令常用的选项及含义,如表 1 所示。

        表 1 sed 命令常用选项及含义
                选项                 含义
                -e 脚本命令                 该选项会将其后跟的脚本命令添加到已有的命令中。
                -f 脚本命令文件                 该选项会将其后文件中的脚本命令添加到已有的命令中。
                -n                 默认情况下,sed 会在所有的脚本指定执行完毕后,会自动输出处理后的内容,而该选项会屏蔽启动输出,需使用 print 命令来完成输出。
                -i                 此选项会直接修改源文件,要慎用。

成功使用 sed 命令的关键在于掌握各式各样的脚本命令及格式,它能帮你定制编辑文件的规则。

sed和awk的区别

  • sed是流编辑器,而awk是文本格式化工具,报告生成器

    如果文件是格式化的,即由分隔符分为多个域的,优先使用awk

  • awk适合对文件的抽取整理,sed适合对文件的编辑。

  • awk适合按列(域)操作,sed适合按行操作

    sed:每次读入一行来处理的,sed 适合简单的文本替换和搜索,sed读取一行,以行作为单位,进行处理。

    awk:每次读入一行来处理的(同sed),但awk读取一行,切割成字段,以字段(列)为单位,进行细节处理。

相关推荐:《Linux视频教程》


# linux  # 的是  # 所示  # 会将  # 文本文件  # 分隔符  # 编辑器  # 命令行  # 区中  # 是一个  # 是一种 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: java ZXing生成二维码及条码实例分享  Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件  如何解决hover在ie6中的兼容性问题  香港服务器租用费用高吗?如何避免常见误区?  Laravel怎么做数据加密_Laravel内置Crypt门面的加密与解密功能  Laravel如何配置Horizon来管理队列?(安装和使用)  Laravel怎么调用外部API_Laravel Http Client客户端使用  PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】  如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程  Firefox Developer Edition开发者版本入口  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  JavaScript如何操作视频_媒体API怎么控制播放  Windows Hello人脸识别突然无法使用  如何在香港免费服务器上快速搭建网站?  如何用IIS7快速搭建并优化网站站点?  UC浏览器如何设置启动页 UC浏览器启动页设置方法  使用C语言编写圣诞表白程序  如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)  详解jQuery停止动画——stop()方法的使用  Laravel怎么实现搜索功能_Laravel使用Eloquent实现模糊查询与多条件搜索【实例】  Laravel如何实现API版本控制_Laravel API版本化路由设计策略  教你用AI将一段旋律扩展成一首完整的曲子  Laravel如何处理CORS跨域请求?(配置示例)  Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】  php 三元运算符实例详细介绍  如何基于云服务器快速搭建网站及云盘系统?  Laravel请求验证怎么写_Laravel Validator自定义表单验证规则教程  Laravel如何实现本地化和多语言支持?(i18n教程)  Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】  Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】  html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】  如何在Windows环境下新建FTP站点并设置权限?  昵图网官方站入口 昵图网素材图库官网入口  如何快速配置高效服务器建站软件?  如何用花生壳三步快速搭建专属网站?  iOS中将个别页面强制横屏其他页面竖屏  Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势  简历在线制作网站免费版,如何创建个人简历?  香港服务器建站指南:免备案优势与SEO优化技巧全解析  微信公众帐号开发教程之图文消息全攻略  Python文件异常处理策略_健壮性说明【指导】  夸克浏览器网页跳转延迟怎么办 夸克浏览器跳转优化  HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】  如何挑选最适合建站的高性能VPS主机?  电商网站制作价格怎么算,网上拍卖流程以及规则?  再谈Python中的字符串与字符编码(推荐)  android nfc常用标签读取总结  网站制作软件免费下载安装,有哪些免费下载的软件网站?  Laravel事件和监听器如何实现_Laravel Events & Listeners解耦应用的实战教程  zabbix利用python脚本发送报警邮件的方法