zoukankan      html  css  js  c++  java
  • Java开发人员必须掌握的Linux命令(三)

    做一个积极的人
    编码、改bug、提升自己
    我有一个乐园,面向编程,春暖花开!

    学习应该是快乐的,在这个乐园中我努力让自己能用简洁易懂(搞笑有趣)的表达来讲解知识或者技术,让学习之旅充满乐趣,这就是写博文的初心。

    前面写了两篇Linux的命令介绍,地址1 地址2 ,前段时间看了哈利波特的一些电影,突然想到Linux的命令就像哈利波特电影中的魔法一样,都是有魔力的。那么学会Linux的这些命令,我们也就可以像哈利波特他们一样拥有魔法,魔法的世界还是挺有趣的,里面也充满了欢乐。本篇再讲三个Linux的命令,这三个命令是Linux三剑客(grep、sed、awk),也是Linux中三个比较重要的命令,学会了这三个命令,那么我们也用了三个比较厉害的魔法。

    旁白开篇:

    有一个魔法学校里面有三个魔法。这三个魔法一直以来被认为是魔法学校里面比较重要的三个魔法,也被称为三剑客,让我们来开启这三个魔法的学习吧!

    1、文本过滤器-grep

    grep命令用于查找文件里符合条件的字符串,是一种强大的文本搜索工具,支持正则表达式或者字符及基本文本字符所编写的过滤条件

    grep指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设grep指令会把含有范本样式的那一列显示出来。说简单一点就是 :用户可以指定的“模式”(选项)对目标文本进行匹配检查 , 查看就打印匹配到的行。

    注: 在grep命令中输入字符串参数时,最好将其用双引号括起来。调用变量时也可以使用双引号。在调用模式匹配事,应使用单引号。

    • 常用命令格式
    # grep  匹配条件 目标文件/目录
    可选参数:
    -c 或 --count : 计算符合样式的列数。
    -i 或 --ignore-case : 忽略字符大小写的差别
    -l 或 --file-with-matches : 列出文件内容符合指定的样式的文件名称
    -n 或 --line-number : 在显示符合样式的那一行之前,标示出该行的列数编号
    -s :不显示不存在或无匹配文本的错误信息。
    -v 或 --revert-match : 显示不包含匹配文本的所有行行
    -r 或 --recursive : 此参数的效果和指定"-d recurse"参数相同
    -E 或 --extended-regexp : 将样式为延伸的普通表示法来使用
    ....
    
    说明:在正则表达式中
    ^ :匹配字符串开始
    $ :匹配字符串结尾
    * :字符出现 [0- 任意次 ]
    ?:字符出现 [0-1 次 ]
    +:字符出现 [1- 任意次 ]
    
    • 简单实例
    # 1、新建一个busyday busyday1 busyday2文件 
    [root@localhost learn_grep]# touch busyday
    [root@localhost learn_grep]# vim busyday 
    # 其他busyday1 busyday2类似,文件内容略
    [root@localhost learn_grep]# cat busyday 
    abc
    123abdef
    789happy
    hjk567
    hello123
    greptest
    
    # 2、查询 happy 所在的文件
    [root@localhost learn_grep]# grep "happy" busyday*
    busyday:789happy
    busyday1:123happy
    busyday2:456happy
    
    # 3、统计 happy 所在的文件内容的出现的次数
    [root@localhost learn_grep]# grep -c "happy" busyday*
    busyday:1
    busyday1:1
    busyday2:1
    
    # 4、显示匹配happy的所有行数,都在第三行
    [root@localhost learn_grep]# grep -n "happy" busyday*
    busyday:3:789happy
    busyday1:3:123happy
    busyday2:3:456happy
    
    # 5、显示所有不包含happy的行
    [root@localhost learn_grep]# grep -v "happy" busyday*
    busyday:abc
    busyday:123abdef
    busyday:hjk567
    busyday:hello123
    busyday:greptest
    busyday:
    busyday1:abc
    busyday1:4567abdef
    busyday1:hjk321
    busyday1:hello987
    busyday2:abc
    busyday2:9876abdef
    busyday2:hjk4321
    busyday2:hello0980
    
    # 6、精确匹配,找到 123happy 
    [root@localhost learn_grep]# grep "123happy" busyday*
    busyday1:123happy
    
    # 7、正则匹配,找到所有123开头的
    [root@localhost learn_grep]# grep -E "^123*" busyday*
    busyday:123abdef
    busyday1:123happy
    

    还有很多,自行进行魔法练习!

    2、字符处理器-sed

    sed命令是利用script来处理文本文件。sed可依照script的指令,来处理、编辑文本文件。能够完美的配合正则表达式便用,功物能不同凡响。

    • 基本语法
    sed  [-参数]  '命令'  文本
    
    参数说明:
    - -e<script>或--expression=<script> 以选项中指定的script来处理输入的文本文件。
    - -f<script文件>或--file=<script文件> 以选项中指定的script文件来处理输入的文本文件。
    - -h或--help 显示帮助。
    - -n或--quiet或--silent 仅显示script处理后的结果。
    - -V或--version 显示版本信息。
    动作说明:
    a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
    c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
    d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
    i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
    p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
    s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦
    
    • 例子
    # 一、sed 's/要被取代的字串/新的字串/g'
    # 1、把aflyun用"java编程技术乐园"替换
    [root@localhost learn_awk]# echo "aflyun0315" | sed 's/aflyun/java编程技术乐园/' 
    java编程技术乐园0315
    [root@localhost learn_awk]# echo "aflyun0315" | sed 's*aflyun*java编程技术乐园*'
    java编程技术乐园0315
    # 二、指定输入流的哪一行被编辑,如果省略,默认是对所有行都进行编辑
    # 2、把aflyun用"java编程技术乐园"替换
    [root@localhost learn_awk]# cat aflyun 
    flyun110
    Hello aflyun
    aflyun0315
    #  替换第2行
    [root@localhost learn_awk]# cat aflyun | sed '2s/aflyun/java编程技术乐园/'
    aflyun110
    Hello java编程技术乐园
    aflyun0315
    #替换所有行(没有地址,就是默认)
    [root@localhost learn_awk]# cat aflyun | sed 's/aflyun/java编程技术乐园/'
    java编程技术乐园110
    Hello java编程技术乐园
    java编程技术乐园0315
    
    # 三、基本编辑命令
    [root@localhost learn_awk]# cat aflyun 
    aflyun110
    Hello aflyun
    aflyun0315
    # 1、插入命令
    [root@localhost learn_awk]# sed '2i java编程技术乐园' aflyun 
    aflyun110
    java编程技术乐园
    Hello aflyun
    aflyun0315
    
    # 2、删除命令
    [root@localhost learn_awk]# sed '2d' aflyun 
    aflyun110
    aflyun0315
    
    # 其他类似
    
    # 四、替换文件内容
    # sed -i 's/aflyun/java编程技术乐园/g' 文件名    
    # 如果没有g标记,则只有每行第一个匹配的aflyun被替换成java编程技术乐园
    [root@localhost learn_awk]# cat aflyun 
    aflyun110
    Hello aflyun
    aflyun0315
    [root@localhost learn_awk]# sed -i 's/aflyun/java编程技术乐园/g' aflyun 
    [root@localhost learn_awk]# cat aflyun 
    java编程技术乐园110
    Hello java编程技术乐园
    java编程技术乐园0315
    

    3、报告生成器-awk

    AWK是一种处理文本文件的语言,是一个强大的文本分析工具。

    之所以叫AWK是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。它也被称为三剑客的老大,利剑出鞘,必会不同凡响。掌握了 awk将会使你的工作变的高大上。

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

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

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

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

    常用 awk 内置变量

    变量名 说明
    $0 当前记录
    $1~$n 当前记录的第n个字段
    FS 输入字段分隔符,默认为换行符
    NF 当前记录中的字段个数,就是有多少列
    NR 已经读出的记录数,就是行号,从1开始
    OFS 输入字段分隔符,默认也是空格
    ORS 输出的记录分隔符,默认为换行符
    • 基本用法1
    awk '{[pattern] action}' {filenames}   # 行匹配语句 awk '' 只能用单引号
    
    
    • 例子
    # 新增一个 happy.log ,内容
    2 this is a test
    3 Are you like awk
    This's a test
    10 There are orange,apple,mongo
    # 每行按空格或TAB分割,输出文本中的2、4项
    [root@localhost learn_awk]#  awk '{print $1,$4}' happy.log 
    2 a
    3 like
    This's 
    10 orange,apple,mongo
     # 格式化输出
    [root@localhost learn_awk]# awk '{printf "%-8s %-10s
    ",$1,$4}' happy.log 
    2        a         
    3        like      
    This's             
    10       orange,apple,mongo
    
    • 基本用法2
    awk -F  #-F相当于内置变量FS, 指定分割字符
    
    • 例子
    [root@localhost learn_awk]# cat happy.log 
    2 this is a test
    3 Are you like awk
    This's a test
    10 There are orange,apple,mongo
    # 使用","分割
    [root@localhost learn_awk]# awk -F, '{print $1,$2}'   happy.log 
    2 this is a test 
    3 Are you like awk 
    This's a test 
    10 There are orange apple # 注意这里逗号没有了
    
    # 或者使用内建变量
    [root@localhost learn_awk]# awk 'BEGIN{FS=","} {print $1,$2}'   happy.log 
    2 this is a test 
    3 Are you like awk 
    This's a test 
    10 There are orange apple # 注意这里逗号没有了
    
    # 使用多个分隔符.先使用空格分割,然后对分割结果再使用","分割
    [root@localhost learn_awk]# awk -F '[ ,]'  '{print $1,$2,$5}'   happy.log 
    2 this test
    3 Are awk
    This's a 
    10 There apple
    
    # $1,$2,$5 输出第一个,第二个和第五个,没有则不输出。例如This's a test ,没$5.
    

    awk 很强大功能也很多,这里只能简单介绍,这个魔法学习不是一天两天就能学成的。

    结语:今天的这三个命令,就是三个魔法。而学习命令的我们,就像在哈利波特电影中魔法学校里学习魔法的那些学生一样,有些人领悟能力比较高,那么他想学习一个魔法的话只要练习一下就会了,有些人领悟能力可能相对较低,需要他在学校中不断的去练习练习,才能掌握这些魔法。但是不管领悟能力高低,只要坚持练习练习,即使练就不了最牛逼的魔法,最终也不会太差。学习Linux命令也是一样的,把Linux命令看成魔法来学习吧!

    推荐阅读

    1、Java开发人员必须掌握的Linux命令(一)
    2、Java开发人员必须掌握的Linux命令(二)
    3、Java开发人员必须掌握的Linux命令(三)
    4、Java开发人员必须掌握的两个Linux魔法工具(四)


    谢谢你的阅读,如果您觉得这篇博文对你有帮助,请点赞或者喜欢,让更多的人看到!祝你每天开心愉快!



    不管做什么,只要坚持下去就会看到不一样!在路上,不卑不亢!

    博客首页 : http://blog.csdn.net/u010648555

    愿你我在人生的路上能都变成最好的自己,能够成为一个独挡一面的人

    © 每天都在变得更好的阿飞云

  • 相关阅读:
    Springboot操作域对象
    Thymeleaf的条件判断和迭代遍历
    Thymeleaf的字符串与变量输出的操作
    window 2003 实现多用户远程登录
    非常漂亮js动态球型云标签特效代码
    Echarts运用
    sass、less和stylus的安装使用和入门实践
    java,js 解unicode
    Java上传下载excel、解析Excel、生成Excel
    小知识点应用
  • 原文地址:https://www.cnblogs.com/aflyun/p/10540891.html
Copyright © 2011-2022 走看看