当前位置:  技术问答>linux和unix

Shell编程 正则表达式

    来源: 互联网  发布时间:2016-03-01

    本文导语:  说明:这是我的试验作业题,由于没有搞过shell编程,一点都不会。周一就要交作业了,希望高手帮我,谢谢。  正则表达式和Shell编程  背景介绍    假定你是一位Linux系统管理员,现在在你供职的公司中管理一台...

说明:这是我的试验作业题,由于没有搞过shell编程,一点都不会。周一就要交作业了,希望高手帮我,谢谢。 
正则表达式和Shell编程 
背景介绍 
  假定你是一位Linux系统管理员,现在在你供职的公司中管理一台Linux服务器。 
  作为一个系统管理员,每天最重要的任务之一就是管理系统的日志文件。假定现在你的手头有一个日志文件,它负责记录所有的登录请求。这个文件的格式如下: 
  日志文件名为:login.log 
  该日志文件中的信息都以行为单位; 
  所有日志文件中每一行记录都遵循如下格式: 
    用户帐号::登录日期和时刻::login   (success ¦fail) 
  程序保证所有用户帐号都服从如下规则: 
    a、用户名只由数字、下划线和英文字母组成; 
    b、用户名必须以英文字母或下划线开始; 
  所有程序在写入新的日志信息时都是简单地将信息添加到文件末尾。所以该日志文件中的信息都是从旧排到新的。 
  一个用于调试的login.log实例位于oslesson/program目录下。 
  接下来我们的所有实验题,都围绕着如何处理这个文件中的信息进行。 
题目一 利用正则表达式查找信息 
  系统管理员往往需要定期统计各个用户的登录情况,并做出报告。但是,一个系统的登录信息每天都会增加,这个日志通常都是非常巨大的。而且由于任何用户的登录都会记录在这个文件中,日志之中同一个用户登录的信息不可能都是连续的。如果管理员每次统计信息时总是一条一条记录地检查,那几乎不可能按时完成统计任务。如果我们有这样一种工具,只要指定我们要查找的用户帐号,它就能自动搜索满足需要那些信息并将其显示出来,无疑会大大减轻管理员的负担。 
  请利用正则表达式的有关知识,将给定文件中的所有root用户和John登录登录失败的信息记录全部找出来,并打印在屏幕上,请给出你使用的命令: 
 _______________________________________________________________ 
提示:本程序至少可以使用grep、sed或awk三者之一完成,如果某些同学熟悉Perl或Python等脚本语言,也可以用它们完成。 
题目二 数据统计 
  有时候我们除了想知道我们要查找的信息之外,还想做一些简单的统计工作,比如,在上一题中,我们打印出了root和John的登录失败列表,有时我们还想知道我们到底找到了多少项。但这种工作要管理员一个一个去数就太累了,而且,当这个日志非常大,其中找到的记录项非常多时,一个一个数无疑是非常不现实的。这种烦人的工作,还是应该让机器来做比较好。 
  请根据上一题的结果,用一条命令算出我们在上一题中找到的记录的项目数,并用一句话显示在屏幕上。格式为: 
  Result:There   are      items. 
  其中  是我们上一题中找到的项目的个数。 
请给出你使用的命令。  ________________________________________________________________ 

  提示:Shell中可以用一对反引号“`”括起一条命令,表示把这命令的整个输出结果当成一个字符串使用。 
  Linux命令中,wc命令可以用来统计给定的文件的行数、单词数和ASCII字符数,同时,wc命令也是一个过滤器,它服从过滤器的所有设计要求。 
  Linux命令中,echo命令可以向屏幕打印信息。 
题目三 一个简单但实用的Shell脚本 
  显然,以上两道题中我们写出的命令比前面写的那些要复杂得多,如果每一次查询都要这么写一遍的话太麻烦了。所以我们可以把它写在一个脚本文件里,需要的时候调用那个文件就可以了。 
  请编写一个脚本文件,它应该先显示出题目一的结果,接下来显示题目二的结果。为统一起见,我们要求这个脚本文件的名字叫做query。注意,Linux环境下的Shell不是唯一的,为了保证这个脚本文件的通用性,我们不应该要求管理员记住这个脚本是用什么语言写的。也就是说,这个文件必须能够在任何Shell环境下直接用命令行“./query”执行,而不允许使用诸如“sh   query”的方式执行。 
  同时,请给出要想使这个脚本文件满足题目中关于文件可执行的要求需要对这个文件做的处理步骤,以及进行这些处理使用的命令(不多于两条)。 
________________________________________________________________ 
题目四 扩展这个脚本 
  现在我们可以使用的脚本来轻松地统计我们想得到的数据了。但这个脚本还不够好,因为它太死板了,只能统计名字叫John和root的用户的登录信息,而且对输入文件的文件名的格式也有要求。如果这个脚本能够像那些Linux标准命令那样,通过各种命令行参数来指定行为的话,无疑能够大大提升这个脚本的通用性。 
  请利用Shell脚本的命令行功能改进题目三的脚本。该脚本我们命名为 
query2,以与query向区别。这个脚本接受的命令行如下: 
  query2          
  其中,三个参数都是是必须出现的。如果命令行格式不满足要求,则程序应给出错误提示并退出。其中第三个参数的取值只能时success、fail或all三者之一,success表示给出用户成功登录的次数统计;fail表示给出用户登录失败的次数统计;all表示给出该用户所有的登录次数统计,包括成功和失败的。该脚本输出的格式和执行时的要求应与第三题相同。 
  提示:显然,要解决这一题就必须先掌握Shell命令行参数的引用方式和Shell的if语句。请自行查阅Shell程序设计的有关资料。 
题目五 统计用户人数 
  仅仅是统计登录信息还是不够,如果管理员不知道日志中有哪些用户登记在案,那么按照我们上述的命令格式,这个程序就没有用武之地了。所以,我们还需要一个程序来统计一个日志文件中究竟有几个用户。 
  我们将这个程序命名为getusers,其接受的命令行格式如下: 
  getusers    
  其中,日志文件名是必须提供的。这个程序扫描给定的输入日志文件,并统计所有的用户名,最后在屏幕上按照一行一个的格式打印出所有的用户名。例如,某个输入日志文件中一共有user1、user2、user3三个用户的登录信息,则输出应该为: 
  user1 
  user2 
  user3 
  该程序的可执行特性与题目3要求相同。 
  提示:这个程序可以用Shell,也可以用awk脚本写,显然,这个程序不能简单地用一个查找语句解决,所以功能更强的awk可能更适合在这种场合使用。如果同学们不熟悉如何在awk中访问命令行参数,也可以使用在Shell脚本中调用awk的方法,用我们在前面学到的Shell处理命令行的方法处理命令行参数,用awk处理程序逻辑。

|
平时不努力,临时抱佛脚
现在的学生啊

    
 
 

您可能感兴趣的文章:

  • linux bash shell命令:文本搜索工具grep正则表达式元字符集(基本集)
  • 请问shell编程正则表达式的问题
  • Shell script正则表达式提取匹配子串
  • 关于在shell脚本中使用正则表达式的问题
  • shell 对字符串进行正则操作
  • LINUX SHELL 正则处理汉字 问题
  • shell正则
  • linux shell正则的一个问题
  • shell脚本中判断字符串匹配正则式的问题
  • 救命Shell 正则表达式
  • 问一个shell正则
  • shell ip 正则表达式
  • shell 正则匹配问题 反向匹配 负匹配
  • 帮忙看看这个shell脚本,用正则匹配字符串为什么匹配不上
  • 问个linux shell正则表达式子的问题
  • shell 有没有整理正则表达式的命令?
  • shell脚本正则匹配文件中的Email并写入到文件中代码分享
  • shell中的正则表达式问题(很简单,大家过来接分)
  • 小弟刚接触shell,想做一个程式,但是难在正则表达式了, 请大侠帮忙看看。
  • 这个正则表达该怎么写(shell)
  • shell里怎么用正则表达式取子串
  • shell编程方括号表达式的问题
  • shell 如何将以下两条表达式合成一条呢?
  • linux shell中 if else以及大于、小于、等于逻辑表达式介绍
  • linux shell 逻辑运算符、逻辑表达式详细介绍
  • linux shell 正则表达式(BREs,EREs,PREs)差异比较
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Centos6下安装Shell下文件上传下载rz,sz命令
  • 不同类型的shell*(K SHELL , C SHELL) 用命令怎么切换?
  • linux bash shell命令:grep文本搜索工具简介
  • 我在执行shell时,想在shell里直接向mysql数据库插入数据,我该如何写shell。
  • Linux下指定运行时加载动态库路径及shell下执行程序默认路径
  • 菜鸟问问题:shell是什么呢?普通的ls、cp、pwd这些命令算不算shell呢?如何把自己写的文件变成shell呢?
  • linux bash shell命令:文本搜索工具grep中用于egrep和 grep -E的元字符扩展集
  • 傻瓜问题,请问shell编程和shell脚本编程的关系
  • linux bash shell命令:文本搜索工具Grep命令选项及实例
  • shell变量和子shell的问题请教
  • 请问“当前shell”和“子shell”的区别?
  • 怎么知道当前是B_SHELL 还是C_SHELL
  • 用户登陆后运行某SHELL退出SHELL就回到LOGIN是怎么作到的?
  • 怎么写shell代码 写好shell怎么运行?
  • 请问一个shell中如何获取这个shell自身抛出的错误?
  • 非登录shell是什么 意思,和登录shell有什么区别啊
  • Solaris 8中修改root的shell为一个非法的Shell后怎么办?
  • 各位Shell高人,如何取得Shell的第10个入口参数?$10不行啊,急!
  • shell 编程 执行shell新建多个终端 并执行程序
  • 如何在一台机器上的shell中执行另外一台机器上的shell
  • 在shell中的交互问题,现在需要在shell结束时按某键或任意键


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3