做一个积极的人编码,修bug,提升自己我有一片乐园,面向编程,春暖花开!学习应该是有趣的。在这个乐园里,我尽量用通俗易懂(搞笑)的表达方式来讲解知识或技术,让学习之旅充满乐趣。这是写博文的初衷。前面写了两篇Linux命令介绍,1.Java开发者必须掌握的Linux命令(一)2.Java开发者必须掌握的Linux命令(二)前段时间看了一些哈利波特的电影,突然想到Linux命令是就像哈利波特电影中的魔法一样,它们都是神奇的。那就学好Linux的这些命令,我??们就可以拥有哈利波特一样的魔法了。魔法世界相当有趣,充满欢乐。这篇文章再讲三个Linux命令。这三个命令就是Linux三剑客(grep、sed、awk),也是Linux中三个重要的命令。学会这三个命令后,我们还使用了三个更强大的魔法。叙述开始了:有一个魔法学校,里面有三种魔法。这三大魔法一直被认为是魔法学院中最重要的三大魔法,也被称为三剑客,让我们开始这三大魔法的学习吧!魔图:1.文本过滤器——grepgrep命令用于在文件中查找符合条件的字符串。它是一个强大的文本搜索工具,支持由字符和基本文本字符编写的正则表达式或过滤条件。grep命令用于搜索内容包含指定模板样式的文件。如果发现文件内容与指定的模板样式相匹配,则默认的grep命令将显示包含模板样式的列。简单来说:用户可以指定一个“模式”(选项)来检查匹配的目标文本,并在查看后打印匹配的行。注意:在grep命令中输入字符串参数时,最好用双引号括起来。调用变量时也可以使用双引号。调用模式匹配时,应使用单引号。常用命令格式#grep匹配条件目标文件/目录可选参数:-c或--count:统计匹配模式的列数。-i或--i??gnore-case:忽略字符大小写的区别-l或--file-with-matches:列出内容与指定样式匹配的文件的文件名-n或--line-number:匹配style在display行前,标记该行的列号-s:不显示不存在或没有匹配文本的错误信息。-v或--revert-match:显示所有不包含匹配文本行的行-r或--recursive:该参数的作用与指定“-drecurse”参数-E或--extended-相同regexp:SetthestyleasExtendedcommonnotationtouse....说明:在正则表达式中^:匹配字符串的开始$:匹配字符串的结束*:字符出现[0-anytimes]\?:字符出现[0-1次]\+:字符出现[1-任意次数]简单例子#1.新建一个busydaybusyday1busyday2文件[root@localhostlearn_grep]#touchbusyday[root@localhostlearn_grep]#vimbusyday#Otherbusyday1busyday2类似,文件内容简写[root@localhostlearn_grep]#catbusydayabc123abdef789happyhjk567hello123greptest#2.查询happy所在文件[root@localhostlearn_grep]#grep"happy"busyday*busyday:789happybusyday1:123happybusyday2:456happy#3.统计happy出现的文件内容Times[root@localhostlearn_grep]#grep-c"happy"busyday*busyday:1busyday1:1busyday2:1#4.显示匹配happy的所有行数,全部在第三行[root@localhostlearn_grep]#grep-n"happy"busyday*busyday:3:789happybusyday1:3:123happybusyday2:3:456happy#5.显示所有不包含happy的行[root@localhostlearn_grep]#grep-v"快乐"busyday*busyday:abcbusyday:123abdefbusyday:hjk567busyday:hello123busyday:greptestbusyday:busyday1:abcbusyday1:4567abdefbusyday1:hjk321busyday1:hello987busyday2:abcbusyday2:9876abdefbusyday2:hjk4321busyday2:hello0980#6.精确匹配,找到123happy[root@localhostlearn_grep]#grep"123happy"和所有以busyday*busyday@host1:17开头的匹配#grep-E"^123*"busyday*busyday:123abdefbusyday1:123happy还有很多,自己做魔术练习!2.字符处理器——sedsed命令是使用脚本来处理文本文件。sed可以根据脚本指令处理和编辑文本文件。它可以与正则表达式完美结合使用,其功能可以不凡。基本语法sed[-parameter]'command'文本参数说明:--e用选项中指定的脚本处理输入的文本文件。--f或--file=使用选项中指定的脚本文件处理输入文本文件。--h或--help显示帮助。--n或--quiet或--silent只显示脚本处理后的结果。--V或--version显示版本信息。动作说明:a:add,a后面可以接字符串,这些字符串会换行出现(当前下一行)~c:replace,c后面可以接字符串,这些字符串可以替换到n1之间的行,n2!d:删除,因为是删除,所以d后面一般没有dongdong;i:插入,i后面可以跟字符串,这些字符串会换行出现(当前上一行);p:Print表示将选定的数据打印出来。通常p会和参数sed-n~s:replace一起运行,可以直接进行替换工作!通常这个动作可以搭配正则记法!比如1,20s/old/new/g就是例子#1.sed's/要替换的字符串/新字符串/g'#1.把aflyun替换成“java编程技术天堂”[root@localhostlearn_awk]#回声“aflyun0315”|sed's/aflyun/java编程科技园/'java编程科技园0315[root@localhostlearn_awk]#echo"aflyun0315"|sed's*aflyun*javaprogrammingtechnologypark*'javaprogrammingtechnologyparadise0315#2.指定要编辑输入流的哪一行。如果省略,则默认编辑所有行。#2.将aflyun替换为“java编程技术天堂”[root@localhostlearn_awk]#cataflyunflyun110Helloaflyunaflyun0315#替换第二行[root@localhostlearn_awk]#cataflyun|sed'2s/aflyun/javaprogrammingtechnologypark/'aflyun110Hellojavaprogrammingtechnologyparkaflyun0315#替换所有行(没有地址,默认)[root@localhostlearn_awk]#cataflyun|sed's/aflyun/java编程科技园/'java编程科技园110Hellojava编程科技园java编程科技园0315#3.基本编辑命令[root@localhostlearn_awk]#cataflyunaflyun110Helloaflyunaflyun0315#1.插入命令[root@localhostlearn_awk]#sed'2ijava编程技术天堂'aflyunaflyun110java编程技术天堂你好aflyunaflyun0315#2.删除命令[root@localhostlearn_awk]#sed'2d'aflyunaflyun110aflyun0315#其他类似#4.替换文件内容#sed-i's/aflyun/java编程技术天堂/g'文件名#如果没有g标记,则只将每行第一个匹配的aflyun替换为java编程技术天堂[root@localhostlearn_awk]#cataflyunaflyun110Helloaflyunaflyun0315[root@localhostlearn_awk]#sed-i's/aflyun/java编程科技园/g'aflyun[root@localhostlearn_awk]#cataflyunjava编程科技园110Hellojava编程科技园java编程科技园03153,报告生成器-awkAWK它是一种处理文本文件的语言,是一种强大的文本分析工具。它之所以被称为AWK,是因为它取了三位创始人姓氏的第一个字符,AlfredAho、PeterWeinberger和BrianKernighan。又被称为三剑客老大,剑出鞘,必将非凡。掌握awk会让你的工作更上一层楼。awk处理机制:awk会逐行处理文本。它支持处理第一行之前的一些准备工作,以及处理最后一行之后的一些总结工作。命令格式如下:BEGIN{}:读入文本第一行前执行,一般用于初始化操作{}:逐行处理,逐行读入文本进行相应处理,是最普通编辑指令块END{}:处理完最后一行文本后执行,一般用于输出处理结果,常用awk内置变量变量名说明$0当前记录$1~$n当前记录的第n个字段FS输入字段分隔符,默认为换行符NF当前记录的字段数为NR有多少列读出的记录数为行号,从1开始,OFS输入字段分隔符,默认也是a空格ORS输出记录分隔符,默认为换行符基本用法1awk'{[pattern]action}'{filenames}#行匹配语句awk''只能使用单引号。例子#添加一个happy.log,内容2这是一个test3你喜欢awk吗这是一个test10里面有orange,apple,mongo#每一行用空格或者TAB分割,输出文本为2.Item4[root@localhostlearn_awk]#awk'{print$1,$4}'happy.log2a3likeThis's10orange,apple,mongo#格式化输出[root@localhostlearn_awk]#awk'{printf"%-8s%-10s\n",$1,$4}'happy.log2a3likeThis's10orange,apple,mongo基本用法2awk-F#-F相当于内置变量FS,指定拆分字符示例[root@localhostlearn_awk]#cathappy.log2thisisatest3AreyoulikeawkThis'satest10里面有orange,apple,mongo#用","分割[root@localhostlearn_awk]#awk-F,'{print$1,$2}'happy.log2这是一个测试3你喜欢awk吗这是一个测试10有橘子苹果#注意这里没有逗号#或者使用内置变量[root@localhostlearn_awk]#awk'BEGIN{FS=","}{print$1,$2}'happy.log2这是一个测试3你喜欢awk吗这是一个测试10有橘子苹果#注意这里没有逗号#使用多个分隔符。先用空格分割,再用","分割结果[root@localhostlearn_awk]#awk-F'[,]''{print$1,$2,$5}'happy.log2这个test3是awk这个10有apple#$1,$2,$5输出第一个,第二个和第五个,如果没有则不输出例如This'satest,without$5.awk很强大,功能很多,这里只能简单介绍一下,这个神奇的学习不是一天两天就能学会的。结语:今天的三个命令就是三个魔法。而我们这些学习命令的人,就像哈利波特电影里那些在魔法学校学习魔法的学生一样。可能比较低,他需要在学校不断修炼,才能掌握这些魔法。不过不管领悟能力高低,只要不断修炼,就算修炼不出最好的魔法,到头来也不会差到哪里去。学习Linux命令也是如此,把Linux命令学成魔法!推荐阅读Java开发者必须掌握的Linux命令(1)Java开发者必须掌握的Linux命令(2)Java开发者必须掌握的Linux命令(3)Java开发者必须掌握的两个Linux神器(4)Java开发者必须掌握的Linux命令高手-学会使用(5)感谢您的阅读,如果您觉得这篇博文对您有帮助,请点个赞或者点个赞,让更多的人看到!祝你有快乐的一天!Java编程技术乐园:一个编程知识分享的公众号。跟着校长老司机学习,每天进步一点点。扫一扫关注,后台回复【资源】,领取宝藏干货!99.9%的小伙伴非常喜欢?每天都在进步的飞云