通过帮网友解答问题训练同学们使用awk,sed案例

由此题答案,我们看出,玩运维,技术仅仅是基础,思想才是上层建筑,
简单、易用是运维追求的目标,本文法3,法5堪称最佳答案。

问题:某成都网友刘刘群内提出这样的问题,希望同学们帮他解答下。
问题如下:
成都@刘刘(13888188)  21:26:58
ls /root  后 我看到了这三个文件
amp-content-display-portlet-1.0.1-20120829.081044-11.war
amp-facebook-post-editor-1.0.1-20120829.084615-1.war
amp-services-portlet-1.0.2-20120829.085733-3.war
然后我要写个脚本,把版本号及后面的数字都给屏蔽了,只匹配文件名,请问下这段匹配的语句该如何写啊?

这是群里网友给他的解法:
find /root/test/ | awk -F "/" '{print $4}' |awk -F "." '{print $1}' | sed   -e   "s/-1//g "
这个解法可以实现,但是有点字符太多了,不够专业。请大家发挥你们学习的技术,给出你们认为最佳的答案。现在到了大家亮剑的时候了。
(to 老男孩培训12期(面授加网络)全体学生)
由于方法太多,这里我们仅限制使用sed,awk完成。

测试文件:
[root@oldboy ~]# cat test.log                           
amp-content-display-portlet-1.0.1-20120829.081044-11.war
amp-facebook-post-editor-1.0.1-20120829.084615-1.war
amp-services-portlet-1.0.2-20120829.085733-3.war
amp-facebook-account-editor-1.0.1-20120829.081353-15.war 
amp-inbound-processor-hook-1.0.1-20120829.081546-9.war
amp-vcr-editor-portlet-1.0.1-20120829.081801-21.war

法1
[root@oldboy ~]# sed 's#\(^.*\)-1\..*\.war#\1.war#g' test.log
amp-content-display-portlet.war
amp-facebook-post-editor.war
amp-services-portlet.war
amp-facebook-account-editor.war 
amp-inbound-processor-hook.war
amp-vcr-editor-portlet.war

法2
[root@oldboy ~]# sed -r 's/(.*.)-(1.0.*.)/\1.war/' test.log
amp-content-display-portlet.war
amp-facebook-post-editor.war
amp-services-portlet.war
amp-facebook-account-editor.war
amp-inbound-processor-hook.war
amp-vcr-editor-portlet.war

法3(最佳答案,符合简单、易用原则)
[root@oldboy ~]# awk -F "-1" '{print $1".war"}' test.log
amp-content-display-portlet.war
amp-facebook-post-editor.war
amp-services-portlet.war
amp-facebook-account-editor.war
amp-inbound-processor-hook.war
amp-vcr-editor-portlet.war

法4
[root@oldboy ~]# awk -F "-[0-9].*"  '{print $1".war"}' test.log
amp-content-display-portlet.war
amp-facebook-post-editor.war
amp-services-portlet.war
amp-facebook-account-editor.war
amp-inbound-processor-hook.war
amp-vcr-editor-portlet.war

法5(最佳答案,符合简单、易用原则)
[root@oldboy ~]# sed  's/-[0-9].*/.war/' test.log
amp-content-display-portlet.war
amp-facebook-post-editor.war
amp-services-portlet.war
amp-facebook-account-editor.war
amp-inbound-processor-hook.war
amp-vcr-editor-portlet.war

法6
[root@oldboy ~]# sed -r 's/-[-.0-9]+[0-9]//' test.log
amp-content-display-portlet.war
amp-facebook-post-editor.war
amp-services-portlet.war
amp-facebook-account-editor.war 
amp-inbound-processor-hook.war
amp-vcr-editor-portlet.war
欢迎朋友们留下你的更多更好的智慧,可以写在评论里。老男孩的学生们看到了,请你们注释下你们的答案,让博友们更清晰一些。

更多相关文章
  • 本博文为老男孩linu培训机构早期的培训教案,特分享以供大家学习参考.全部系列分为5篇博文,本博文为第4篇:4.3 老男孩培训第八节课前考试题案例(门户面试题)考试题七:处理以下文件内容,将域名取出并根据域名进行计数排序处理:(百度和sohu面试题)oldboy.loghttp://www.etia ...
  • 提问者采纳这个问题很不错唉,有一个问题,举个例子来说,假设有一个类apple,apple a1 = ap2;(ap2已经定义好)与apple a1; a1 = a2;的结果是不一样的,前者是用复制构造函数对a1进行初始化,而第二种形式是先调用构造函数对a1初始化(假设无参),然后调用赋值运算符对象a ...
  • 精选30道Java笔试题解答
    原文地址:http://www.cnblogs.com/lanxuezaipiao/p/3371224.html 都是一些非常非常基础的题,是我最近参加各大IT公司笔试后靠记忆记下来的,经过整理献给与我一样参加各大IT校园招聘的同学们,纯考Java基础功底,老手们就不用进来了,免得笑话我们这些未出校 ...
  • ##########################################################################################部分题目引用自:https://www.centos.bz/2012/07/shell-script-exercises ...
  • 先把题列出来,解答稍后再列出出来.awk使用awk输出以下结果3*4 3/3 5%3 3^3 3+3 3-3使用begin模块 赋值a=1 b=2 c=3,使用与和非命令输出 01 10 11 00.使用关系运算符< <= > >= != ==,配合if和print语句 输出 ...
  • 学会感恩会使你回报的更多
    这个社会里,特别是年轻人,很多人索取总是比回报做的多!学习.买房.结婚.生子都要靠父母,甚至工作了,还朝父母要钱花. 就拿运维朋友来说吧,每次问了问题后,解决了就没影了,下次还来问问题,解决了又沉底了.这些简单的习惯会成为这些人发展的拦路虎,技术学再多也没啥用,前面的路自己给自己堵死了!感恩不光是下 ...
  • 学好网络经验谈我1993年开始学习计算机基础知识,利用两年的时间将计算机的硬件及部分软件进行了系统的学习:1995年开始学习网络知识,通过一年的学习,我已熟练掌握了网络的相关知识并能独立完成组网,1996年正式开始从事网络方面的工作,到现在已经积累了十几年的经验.回想这些年,我从零开始,从不懂计算机 ...
  • 今天激动万分写下这篇博文,算是给自己这几年的IT生活做个总结吧,从上高中第一次见到计算机长的跟21寸电视机一样大的样子,就在心里好奇万分,那时1个月能在学校的机房见见计算机长什么样子就不错了.几乎在高中的生活印象中就没有碰到几次电脑,因为人多“机”少,连个打字都没学会.班里几个家庭条件不错的同学,家 ...
一周排行