sed和awk使用

区别

         1、sed是流编辑器(行),而awk是文本格式化工具,报告生成器(解释型的编程语言);
         2、awk适合对文件进行抽取整理,sed适合对文件进行编辑;
         3、sed读取一行数据,会以行作为单位进行处理,而awk读取一行,会切割成字段,
               以字段(列)为单位,进行细节处理。

sed

        sed是一个很好的文件处理工具,本身是一个管道命令,主要是以  行 为单位进行处理,
  可以将数据行进行替换、删除、新增、选取等特定工作,下面先了解一下sed的用法。

  语法:

sed [-nefri] ‘command’ file(s)

 常用选项:

        -n∶使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到荧幕上。
            但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行才会被列出来。
            (stdin是标准输入,一般指键盘输入到缓冲区里的东西。 )仅显示sed处理后的结果。
        -e∶直接在指令列模式上进行 sed 的动作编辑(即 多点编辑,在前一个命令后继续执行编辑命令);
        -f∶直接将 sed 命令 写在一个文件内, -f   filename 则可以执行 filename 内的sed 动作;
        -r∶sed 的动作支援的是延伸型正规表示法的语法。(预设是基础正规表示法语法)
        -i∶直接修改读取的文件内容,而不是由萤幕输出。
          (一般sed是不会改变源文件内容的,如果想直接修改原文件内容可以用该参数)

常用命令:

           a : 新增, a 的后面可以接字串,而这些字串会在新的一行出现(当前的下一行)
           c : 代替, c 的后面可以接字串,这些字串可以替代 n1,n2 之间的行!
           d : 删除, 因为是删除啊,所以 d 后面通常不接任何咚咚;
           i : 插入, i 的后面可以接字串,而这些字串会在新的一行出现(当前的上一行);
           p : 列,亦即打印模板块的行。通常 p 会与参数 sed -n 一起运作~
           s : 取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!
              (s可以搭配g来使用,g 表示行内全面替换,这样就可以全局取代啦!)
  
           (sed 's/要被取代的字串/新的字串/g' xxx.txt)
  
  例如 1,20s/old/new/g 。

sed常用元字符集:


      ^        匹配行开始,如:/^sed/匹配所有以sed开头的行。
      $        匹配行结束,如:/sed$/匹配所有以sed结尾的行。
       .        匹配一个非换行符的任意字符,如:/s.d/匹配s后接一个任意字符,最后是d。
       *        匹配0个或多个字符,如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。
       []       匹配一个指定范围内的字符,如/[ss]ed/匹配sed和Sed。  
       [^]      匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。
       \(..\)   匹配子串,保存匹配的字符,如s/\(love\)able/\1rs,loveable被替换成lovers。
      &        保存搜索字符用来替换其他字符,如s/love/**&**/,love这成**love**。

实例:

 新增(插入)内容:sed '2a hello,world' passwd       #在passwd文件的第二行 后 加入“hello,world”sed '2,5a hello,word' passwd      #在passwd文件的第二行至第五行每行 后 都加入“hello,world”sed '2i hello,world' passwd       #在passwd文件的第二行 前 加入“hello,world”sed '2,5i hello,world' passwd     #在passwd文件的第二行至第五行每行 前 都加入“hello,world”代替:sed '1c hello' passwd         #将第一行用“hello”代替sed '2,5c hello' passwd       #将第二行到第五行都用“hello”代替sed '2,$c hello' passwd       #将第二行到最后都用“hello”代替替换一行中的某部分:sed '1,3s/root/abc/' passwd   #替换第一行到第三行,将root替换为abc    sed 's/root/abc/g' passwd     #全局替换,将root替换为abcsed 's/root//g' passwd        #删除所有字符串‘root’sed -n '/root/p' passwd | sed 's/root/123/g'    #查询包含关键字‘root’的行,然后将root替换为123删除某行:sed '1d' passwd              #删除第一行sed '$d' passwd              #删除最后一行sed '1,2d' passwd           #删除第一行到第二行sed '2,$d' passwd           #删除第二行到最后一行显示某行:sed -n '1p' passwd           #显示第一行sed -n '$p' passwd           #显示最后一行sed -n '1,2p' passwd        #显示第一行到第二行sed -n '2,$p' passwd        #显示第二行到最后一行sed -n '/root/p' passwd     #查询所有包含关键字‘root’的行sed -n '/\$/p' passwd       #查询包括关键字$所在所有行,使用反斜线\屏蔽特殊含义

注释:
     ①如果上面这些加上  ‘-i’   选项,则就是∶直接修改读取的档案内容,而不是由萤幕输出。
      (一般sed是不会改变源文件内容的,如果想直接修改原文件内容可以用该参数)。
     ②‘-e’   选项的用法,例,sed -e '3,$d' -e 's/bash/test/g' passwd   
      #-e表示多点编辑,第一个编辑命令删除/etc/passwd第三行到末尾的数据,第二条命令搜索bash替换为test。

扩展:

 1.sed定位间隔几行输出:sed -n "1~2" passwd   从第1行开始每次间隔2行输出一次。2.删除空行:sed -i "/^$/d" passwd3.sed 组合多个表达式:sed '表达式' | sed '表达式'等价于:sed '表达式; 表达式'例,nl passwd | sed '{20,30d;s/false/true}'   用分号(";")分割多个命令,实现多命令同时执行。或nl passwd | sed '20,30d' | sed 's/false/true'4. 从文件读入:r命令file里的内容被读入filename里面,显示在与test匹配的行后面,如果匹配多行,则file的内容将显示在所有匹配行的下面:sed '/test/r file' filename例,sed '/root/r passwd' shadow5.写入文件:w命令  在example中所有包含test的行都被写入file里:sed -n '/test/w file' example例,sed -n '/root/w shadow' passwd6 读取1-2行数据 再把里面的python换成python2然后把这两行写入a.txtsed -n '1,2p' testsed.txt | sed 's/python/python2/g' > a.txt

awk

       awk是一种解释型的编程语言,用于在linux/unix下对文本和数据进行处理。它在命令行中使用,但更多是作为脚本来使用。awk有很多内建的功能,比如数组、函数等,这是它和C语言的相同之处,灵活性是awk最大的优势。

语法:

1.命令行格式:
        命令行格式又分两种:

   ①awk [options] 'command' file(s)②awk 'BEGIN{ print "start" } pattern{ commands } END{ print "end" }' file(s)

      awk 'BEGIN{ print "start" } pattern{ commands } END{ print "end" }' file(s) 
      第一步:执行BEGIN{ commands }语句块中的语句;
      第二步:从文件或标准输入(stdin)读取一行,然后执行pattern{ commands }语句块,它逐行扫描文件,从第一行到最后一行重复这个过程,直到文件全部被读取完毕。
      第三步:当读至输入流末尾时,执行END{ commands }语句块。

       BEGIN语句块在awk开始从输入流中读取行之前被执行,这是一个可选的语句块,比如变量初始化、打印输出表格的表头等语句通常可以写在BEGIN语句块中。

       END语句块在awk从输入流中读取完所有的行之后即被执行,比如打印所有行的分析结果这类信息汇总都是在END语句块中完成,它也是一个可选语句块。

       pattern语句块中的通用命令是最重要的部分,它也是可选的。如果没有提供pattern语句块,则默认执行{ print },即打印每一个读取到的行,awk读取的每一行都会执行该语句块。
       例,awk -F ':' '{print $1}' passwd   #读取每一行
              awk -F ':' 'BEGIN{print "Line Col User"}{print NR,NF,$1}END{print FILENAME}' passwd

常用命令选项:

    -F fs   fs为指定的输入分隔符,fs可以是字符串或正则表达式,如-F ':'
    -v var=value   赋值一个用户定义变量。将外部变量传递给awk
    -f scripfile  从脚本文件中读取awk命令        
               #例,awk -f {awk脚本} {文件名}   awk -f cal.awk log.txt
    -m[fr] val   对val值设置内在限制,-mf选项限制分配给val的最大块数目;
               -mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用。

关于awk脚本,我们需要注意两个关键词BEGIN和END:
       BEGIN{ 这里面放的是执行前的语句 }
       END {这里面放的是处理完所有的行后要执行的语句 }
       {这里面放的是处理每一行时要执行的语句}

常用内置变量:

    1.NR   显示行号
    2.NF   显示每行的字段数量
    3. $NF  表示的最后一个列,即输出最后一个字段的内容
    4. $NR  
    5.FILENAME   显示正在处理的文本的名称

awk的流程控制语句:

        在linux awk的while、do-while和for语句中允许使用break,continue语句来控制流程走向,也允许使用exit这样的语句来退出。
       break中断当前正在执行的循环并跳到循环外执行下一条语句。if 是流程选择用法。
       awk中,流程控制语句,语法结构,与c语言类型。有了这些语句,其实很多shell程序都可以交给awk,而且性能是非常快的。下面是各个语句用法。

1.if语句;

    if(表达式)  或    if(表达式)
        语句1            {语句1}
    else             else if(表达式)
        语句2             {语句2}
                         else
                            {语句3}
例,awk -F ':' 'BEGIN{count=0}{if($3>=100){count+=1 print $1,$3}}END{print "UID大于等于100的用户共:"count"个"}'
   (先初始化count=0,然后使用if判断,最后统计共有几个并将用户名和UID打印出来$1,$3。)

2.for循环语句:

    for(变量 in 数组)  或  for(变量;条件;表达式)
            {语句}                  {语句}

3.while循环语句:

      while(表达式)
            {语句}

正则运算符:
    运算符     描述
    ~      匹配正则表达式和
    ~!     不匹配正则表达式

实例

逐行读取: cat mycontent.txt |awk '{print "Line contents are: "$0}

awk -F ':' '{print $1,$}' passwd   #每行安给定的分隔符':'来分割,并输出文本中的1,2项awk -F ':' -v x=1 '{print $x}' passwd   #定义一个变量x,将变量的值传递给awkor  x=1awk -F ':' -v val=x '{print $val}' passwdawk -F '[/,:]' '{print $1}' passwd   #定义多个分割符awk '$1>2' log.txt   #过滤第一列大于2的行awk -F ':' '$1=="root"' passwd   #过滤第一列等于字符串“root”的行awk '$1>2 && $2=="Are" {print $1,$2,$3}' log.txt    #过滤第一列大于2并且第二列等于'Are'的行awk '$2 ~ /th/ {print $2,$4}' log.txt    # 输出第二列包含 "th",并打印第二列与第四列awk '/re/ ' log.txt   # 输出包含"re" 的行注意:~ 表示模式开始。// 中是模式。awk -F ':' '{print NF}' passwd   #显示有多少列awk -F ':' '{print NR}' passwd   #显示有多少行awk -F ';' ‘{print FILENAME}’ passwd   #显示当前处理的文件名awk -F ":" 'BEGIN{print "start..."} {print NF} END{print "end..."}' passwdawk -F ":" 'BEGIN{pritn "start..."}{if($1=="root"){print $1}else{print NF}}END{print "end..."}' passwd

扩展:

1.print和printfawk中同时提供了print和printf两种打印输出的函数。其中print函数的参数可以是变量、数值或者字符串。字符串必须用双引号引用,参数用逗号分隔。如果没有逗号,参数就串联在一起而无法区分。这里,逗号的作用与输出文件的分隔符的作用是一样的,只是后者是空格而已。  printf函数,其用法和C语言中printf基本相似,可以格式化字符串,输出复杂时,printf更加好用,代码更易懂。

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

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

相关文章

MacBook macOs安装RabbitMQ【超详细图解】

目录 一、使用brew安装RabbitMQ 二、安装RabbitMQWeb管理界面 三、启动RabbitMQ 一、使用brew安装RabbitMQ 刚好项目要用到RabbitMQ,安装顺便写下安装步骤记录一下以备用 使用brew命令安装,一般Mac会自带这个命令,如没有,…

SQL server-excel数据追加到表

参考文章:SQL server 2019 从Excel导入数据_mssql2019 导入excel数据-CSDN博客 将excel数据导入到SQL server数据库的详细过程 注意:第一行数据默认为数据库表中的字段,所以这个必须要有,否则无法映射导入 问题1:ADD…

开发一款短剧视频小程序软件多少钱?

今年最炙手可热的互联网项目之一当属短剧小程序,常常受到客户的咨询,他们想了解开发一套短剧小程序需要多少费用。今天,我将详细介绍相关费用及开发细节。 小程序认证费用: 每年300元,是确保小程序正常运营所必需的认证…

YOLOv8独家原创改进:自研独家创新FT_Conv,卷积高效结合分数阶变换

💡💡💡本文自研创新改进:卷积如何有效地和频域结合,引入分数阶傅里叶变换(FrFT)和分数阶Gabor变换(FrGT),最终创新到YOLOv8。 使用方法:1)直接替换原来的C2f;2)放在backbone SPPF后使用;等 推荐指数:五星 在道路缺陷检测任务中,原始map为0.8,FT_Conv为0.82 收…

视频智能分析国标GB28181云平台EasyCVR加密机授权异常是什么原因?

国标GB28181视频汇聚/视频云存储/集中存储/视频监控管理平台EasyCVR能在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集中管理,实现视频资源的鉴权管理、按需调阅、全网分发、云存储、智能分析等。 近期有用户选择使用加密机进行EasyCVR授…

KaiwuDB 亮相中国国际供应链促进博览会

11月28日,全球首个以供应链为主题的国家级展会——2023 中国国际供应链促进博览会(简称“链博会”)在北京盛大召开。KaiwuDB 受邀亮相大会,向与会者展示现代数据库技术在数字科技链条中的根基作用,其中分布式多模数据库…

第十六章 设计题

Python基础、函数、模块、面向对象、网络和并发编程、数据库和缓存、 前端、django、Flask、tornado、api、git、爬虫、算法和数据结构、Linux、设计题、客观题、其他 第十六章 设计题 1. 设计一个办公室摄像头的web后台管理系统 假设功能如下: 1. 可以 开启关闭重启每个摄…

基于springboot实现冬奥会科普平台系统【项目源码+论文说明】

基于SpringBoot实现冬奥会科普平台系统演示 摘要 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理平台应运而生&…

傅里叶变换及其在机器学习中的应用

​​​​​​​一、介绍 傅立叶变换是一种数学技术,在各个科学和工程领域发挥着关键作用,其应用范围从信号处理到量子力学。近年来,它在机器学习领域发现了新的意义。本文探讨了傅里叶变换的基础知识及其在机器学习应用中日益增长的重要性。 …

Nuxt.js:下一代Web开发框架的革命性力量

文章目录 一、Nuxt.js简介二、Nuxt.js的特点1. 集成Vue.js和Node.js2. 自动代码分割和优化3. 服务端渲染(SSR)4. 强大的路由管理5. 丰富的插件系统 三、Nuxt.js的优势1. 提高开发效率2. 降低维护成本3. 提高用户体验 四、Nuxt.js在实际应用中的案例1. 电…

HNCTF2022Week1 Reverse WP

文章目录 [HNCTF 2022 Week1]超级签到[HNCTF 2022 Week1]贝斯是什么乐器啊?[HNCTF 2022 Week1]X0r[HNCTF 2022 Week1]你知道什么是Py嘛?[HNCTF 2022 Week1]CrackMe[HNCTF 2022 Week1]给阿姨倒一杯Jvav[HNCTF 2022 Week1]Little EndianNSSCTF{Littl3_Endi…

sql 注入 ctf wiki

部分转载ctf-wiki 判闭合形式: 哪个报错就是哪种 1,1’,1’‘,1’,1’(双引号带括号) 万能密码: admin’ – admin’ # admin’/* ’ or 11– ’ or 11# ’ or 11/* ) or ‘1’1– ) or (‘1’1– 数据库名: SEL…

基础算法学习

文章目录 快速排序归并排序二分浮点数二分 高精度BigIntegerBigDecimal 前缀和差分双指针位运算离散化区间合并 快速排序 确定分界点x (可以是左边界,右边界,中间随机)将小于等于x的数放到左边,大于等于x的放右边递归…

广州华锐视点:3D毒品预防专题教育平台帮助青少年提升拒毒意识

随着科技的不断发展,人们的生活方式也在不断地改变。在这个信息爆炸的时代,传统的普法教育方式已经无法满足人们的需求。为了适应这一变化,越来越多的教育机构开始尝试利用现代科技手段进行普法教育。其中,3D毒品预防专题教育平台…

跨界融合,科技耕耘:MTX基金公司与ICG共塑全球农业科技新景观

在全球经济快速发展的当下,农业科技创新成为了社会进步的重要推动力。MTX基金公司对ICG的投资是在这一背景下的战略决策,不仅寻求经济效益,更承载着改善全球农业生产、实现食品安全与环境保护的使命。 1、战略投资:文化情怀与全球…

开发知识点-Maven包管理工具

Maven包管理工具 SpringBootSpringSecuritydubbo图书电商后台实战-环境设置(JDK8, STS, Maven, Spring IO, Springboot)点餐小程序Java版本的选择和maven仓库的配置视频管理系统&&使用maven-tomcat7插件运行web工程SpringTool suite——maven项目…

vue2常见的语法糖

Vue.js 2 提供了一些语法糖&#xff08;syntactic sugar&#xff09;来简化常见的操作。以下是一些 Vue.js 2 中常用的语法糖&#xff1a; v-bind 简写&#xff1a; <!-- 完整语法 --> <a v-bind:href"url">Link</a><!-- 简写 --> <a :hr…

【MySQL数据库】SQL查询语句总结

目录 一、查询数据 1.1 基本查询语句 1.2 表单查询 1.3 WHERE子句 1.3.1 IN关键字查询 1.3.2 Between查询范围 1.3.3 Like匹配查询 1.3.4 AND多条件查询&#xff08;等同于&&&#xff09; 1.3.5 OR多条件查询&#xff08;等同于||&#xff09; 1.3.6 LIMIT子句 1.3.7 对…

tsx语法

安装JSX库 安装完之后在vite.config.ts进行插件使用&#xff0c;代码如下&#xff1a; 然后就可以愉快的使用TSX来开发Vue组件了&#xff0c;下面主要说一下SFC和TSX的部分区别。 基本语法对照 defineComponent 和 setup setup中函数的返回值有多种方式&#xff0c;可以直接…

vuepress-----9、PWA

# 9、PWA 使用babel 的插件形式 [vuepress/pwa,{serviceWorker: true,updatePopup: {message: "New content is available.",buttonText: "Refresh"}}]提供 Manifest 和 icons (opens new window) 拷贝到public目录下 发布后出现 service workers [外链图片…