shell编程----sed grep awk

其他编程

  • 前言
  • Sed的介绍
    • sed命令格式
    • Sed程序示例
  • Grep
    • grep示例
  • Grep与Find
    • 示例
  • awk
    • 程序示例:
  • 总结

前言

  • sed
  • grep
  • awk

Sed的介绍

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

sed命令格式

  • sed命令格式:
    sed [options] ‘command’ file(s)
    或者 sed [options] -f scriptfile file(s)
    shell编程----sed grep awk_第1张图片

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所能完成的全部工作,尤其是基于文本的样式扫描和处理。

你可能感兴趣的:(linux系统课程学习,linux,unix,正则表达式)