shell编程的grep,sed,awk指令的简单用法

一   grep(文本过滤命令):

     GREP是Global search Regular Expression and Print out the line的简称,即全面搜索正则表达式并把行打印出来。

grep命令基本用法
     grep命令是支持正则表达式的一个多用途文本搜索工具,grep的一般格式为:grep [选项] [模式] [文件...]

     grep命令由选项、模式和文件三部分组成,它在一个或多个文件中搜索满足模式的文本行,模式后的所有字符串被看做文件名,文件名可以有多个,搜索的结果被打印到屏幕,不影响原文件的内容。Grep命令的选项用于对搜索过程进行补充说明。

    grep常用过滤模式:


   为了演示效果,将/etc/passwd文件复制到/mnt目录下,添加些许内容比如大写字母开头的行来进行文件内容过滤:


    -v参数的作用:过滤指定条件之外的内容:


    通过对-v参数的使用过滤出以root开头或结尾以外的行,进一步就可以过滤出root在中间的行:


   grep的其他用法:过滤指定字符:


   为了实验效果,创建一个文件并写入一下内容:


  grep过滤字符的效果演示:

 



  grep指令的应用:  

   1    过滤主机ip:


   2   编写脚本,过滤出可以登录系统的用户名:

        在/etc/shells文件内,有着关于可以登录系统用户的信息,其中nolgoin一行表示无法登录系统:

       

         使用-v过滤出nologin以外的行,即可登陆系统的用户的状态:


         编辑脚本,将过滤出的内容里面的空格替换成|并作为输入条件进行对/etc/passwd文件的过滤,对于过滤结果,指定分隔符为:并只打印输出第一列:


       执行脚本,可以看到可登录系统的用户了:


二  sed(行编辑器)

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

     sed命令格式:   sed   [options]   command    file

     1   sed的a模式(添加模式)

          新建文件并写入内容hello:

         在添加内容时,指定所要添加的行,a后面跟要添加的内容。比如在hello后面添加world并换行添加westos。

         除了a可以添加,i也可以添加。a和i的区别在于,a是在指定内容的后面添加,i是在指定内容的前面添加:


    2  sed的c模式(修改模式)

        sed的c模式和a模式类似,即在指定行后,c后面跟修改之后的内容。

     3  sed的d模式(不显示模式)

        将/etc/fstab文件复制到/mnt目录下,cat -n进行标明行号的查看,'2d;6d'即sed的d模式功能,表示不显示第2行和第6行:


        不显示以#开头的行:


        不显示空行:


    4  sed的p模式(显示模式):

        只显示以#开头的行:


        显示不以#开头的行。其中!的作用是不显示前面指定的条件的行:


        显示2-6行:


       显示第2行和第6行:


      显示除第2行和第6行以外的内容。这个操作也可以用d模式实现,在用p模式的时候,每一行的输出结果都会打印两遍,需要使用指令uniq -d 只显示重复的行也就是只显示一遍:


5   sed结果的保存:

      对于sed结果的保存有两种方式,一种是使用追加或者重定向的方式将结果保存到文件,一种是sed的w模式直接在w后面跟保存的文件名。

      两种方式的区别在于:>是两个程序,在全部输出之后保存到文件

                                        w模式是一个程序,输出一个结果保存一个结果

    

6   使用sed进行脚本功能的实现:

      1    在两个文件内分别写入用户名和密码,编写脚本进行用户的建立并设置对应的密码

           

          脚本内容的书写:大致思路是先统计用户名文件的行数,然后使用for循环每次使用用户名文件中的用户名和对应的密码进行用户的建立。sed在脚本中的功能是将指定行打印输出作为useradd和passwd命令的输入。

   

        脚本的执行:用户建立和密码设置成功


       2  编辑脚本修改http服务的端口:

         对于http服务的端口,在/etc/httpd/conf/httpd.conf文件中,Listen 80一行即是http服务所使用的端口。sed在此处的作用为,将以Listen开头的一行内容修改为Listen $1,并在修改之后将42行也就是Listen这一行显示出来。脚本中-i的作用是对原配置文件进行永久性修改,如果没有-i参数,那么配置文件本身不会被修改,当然端口也无法修改了。


       脚本的执行:  将端口改为666,修改成功并查看到配置文件的42行为Listen 666:


三  awk(报告生成器):

     1    awk处理机制:

            awk会逐行处理文本,支持在处理第一行之前做一些准备工作,以及在处理完最后一行做一些总结性工作,在命令格式上体现如下:

             BEGIN{}:读入第一行文本之前执行,一般用来初始化操作

             {}:逐行处理,逐行读入文本进行相应的处理,是最常见的编辑指令块

             END{}:处理完最后一行文本之后执行,一般用来处理输出结果

     awk的常用指令模式:


    指令演示:




   输出行号的显示:


     将passwd文件中以a开头且以nologin结尾的行输出第1列和第6列:


  2   awk指令的功能实现:

       1   输出ip:

        

       2   统计文件行数:

       

     


 

猜你喜欢

转载自blog.csdn.net/letter_a/article/details/80756242