• shell编程----sed grep awk


    前言

    • sed
    • grep
    • awk

    Sed的介绍

    • Sed是一种在线编辑器,它一次处理一行内容。
    • 处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。
    • 主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等。

    sed命令格式

    • sed命令格式:
      sed [options] ‘command’ file(s)
      或者 sed [options] -f scriptfile file(s)
      在这里插入图片描述

    Sed程序示例

    • (1)[wxdh@主机名]$ sed ‘2d’ test
      解释:删除test文件的第二行。

    • (2)[wxdh @主机名]$ sed ‘s/34/100/g’ test
      解释:在整行范围内把34替换为100。如果没有g标记,则只有每行第一个匹配的34被替换成100。

    • (3)[wxdh @主机名]$ sed -n ‘2,/^34/p’ test
      解释:打印从第2行开始到第一个包含以34开始的行之间的所有行。

    • (4)[wxdh @主机名]$ sed ‘/43/i\new line’ test
      解释:如果43被匹配,则把反斜杠后面的文本插入到匹配行的前面。

    • (5)[wxdh @主机名]$ sed -n ‘w test1’ test
      解释:将test文件中的内容写入到test1中。

    • (6)[wxdh @主机名]$ sed ‘3q’ test
      解释:打印完第3行后,退出sed。

    Grep

    • grep(Global Regular Expression Print),表示全局正则表达式版本,它的使用权限是所有用户。

    • Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来

    • grep命令格式:
      grep [options]

    grep示例

    • (1)[wxdh@主机名]$ grep ‘test’ dh*
      解释:显示所有以dh开头的文件中包含 test的行。

    • (2)[wxdh @主机名]$ grep ‘test’ dha dhb dhc
      解释:显示在aa、bb、cc文件中匹配test的行。

    • (3)[wxdh @主机名]$ grep ‘[a-z]{5}’ aa
      解释:显示所有包含每个字符串至少有5个连续小写字符的字符串的行。

    • (4)[wxdh@主机名]$ grep ‘w(es)t.\1’aa
      解释:如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.
      ),这些字符后面紧跟着另外一个es(\1),找到就显示该行。如果用egrep或grep -E,就不用“\”号进行转义,直接写成‘w(es)t.*\1’就可以。

    Grep与Find

    • find是在磁盘/分区中找到文件,可以按照文件名、文件类型、文件大小、访问时间等来找到指定文件。

    • grep是查找文件的利器,可以在一个txt文本中截取到有特定关键字的行,并显示出来;也可以通过关键字,在一个文件夹下查找多个有这些关键字的文件,并生成结果,即根据文件内容递归查找目录

    示例

    • (1)[wxdh@主机名]$ find ~ -name “[a-z][0-9]*.txt” –print
      解释:在主目录中查找以一个小写字母和一个数字开头的txt文件并显示。

    • (2)[wxdh @主机名]$ find ~ -mmin +60
      解释:在主目录中查找60分钟前被改动过的文件。

    • (3)[wxdh @主机名]$ grep ‘hello world’ *
      解释:在当前目录搜索带有’hello world’行的文件。

    • (4)[wxdh @主机名]$ grep –l –r ‘hello world’ *
      解释:在当前目录及其子目录下搜索带有’hello world’行的文件,但是不显示匹配的行,只显示匹配的文件。

    awk

    • awk 是一种样式扫描与处理工具 。
    • awk几乎可以完成 grep和sed所能完成的全部工作,尤其是基于文本的样式扫描和处理,awk所做的工作有些像数据库,但与数据库不同的是,它处理的是文本文件,这些文件没有专门的存储格式,普通的人们就能编辑、阅读、理解和处理它们。
    • awk是一种编程语言,用于在Unix/Linux下对文本和数据进行处理,数据可以来自标准输入、一个或多个文件,或其它命令的输出,它支持用户自定义函数和动态正则表达式等先进功能。

    程序示例:

    • (1)$awk ‘$1>100 {print $1>>”output_file”;print $1} test
    • 解释:如果文件第一列的值大于100,则把它输出到文件output_file中,并打印出来。也可以用“>>”来重定向输出,但不清空文件,只做追加操作。
    • (2)$awk ‘BEGIN{ “date” | getline d; print d} END{close(“date”)}’ test
    • 解释:执行Linux的date命令,并通过管道输出给getline(使用方法详见附录),然后再把输出赋值给自定义变量d,并打印它。BEGIN模块后紧跟着动作块,这个动作块在awk处理任何输入文件之前执行。END块执行关闭管道操作。
    • (3)$ awk ‘END{print “The number of records is” NR}’ test
    • 解释:打印所有被处理的记录数。END不匹配任何的输入文件,但是执行动作块中的所有动作,它在整个输入文件处理完成后被执行。

    总结

    • sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换、删除、新增、选取等。
    • grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。
    • awk几乎可以完成 grep和sed所能完成的全部工作,尤其是基于文本的样式扫描和处理。
  • 相关阅读:
    MySQL之CRUD
    实时数据监控,三防平板在工业领域的应用解析
    Aspose.Slides 21.11.0 For .NET Crack
    【算法1-6】二分查找与二分答案——查找
    小程序 检测是否添加至我的小程序
    win10系统的应用商店不见了怎么安装回来
    JADE(自适应差分进化优化算法)在C++中的完整实现与深度解析
    Spring Boot 中使用 tkMapper
    Vue组件通信应用实践总结
    Improving 3D Imaging with Pre-Trained Perpendicular 2D Diffusion Models
  • 原文地址:https://blog.csdn.net/weixin_51422230/article/details/127132810