做一个积极的人

编码、改bug、提升自己

我有一个乐园,面向编程,春暖花开!

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

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

旁白开篇:

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

1、文本过滤器-grep

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

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

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

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

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

2、字符处理器-sed

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

  • 基本语法
  1. sed [-参数] '命令' 文本
  2. 参数说明:
  3. - -e<script>或--expression=<script> 以选项中指定的script来处理输入的文本文件。
  4. - -f<script文件>或--file=<script文件> 以选项中指定的script文件来处理输入的文本文件。
  5. - -h或--help 显示帮助。
  6. - -n或--quiet或--silent 仅显示script处理后的结果。
  7. - -V或--version 显示版本信息。
  8. 动作说明:
  9. a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
  10. c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
  11. d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
  12. i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
  13. p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
  14. s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦
  • 例子
  1. # 一、sed 's/要被取代的字串/新的字串/g'
  2. # 1、把aflyun用"java编程技术乐园"替换
  3. [root@localhost learn_awk]# echo "aflyun0315" | sed 's/aflyun/java编程技术乐园/'
  4. java编程技术乐园0315
  5. [root@localhost learn_awk]# echo "aflyun0315" | sed 's*aflyun*java编程技术乐园*'
  6. java编程技术乐园0315
  7. # 二、指定输入流的哪一行被编辑,如果省略,默认是对所有行都进行编辑
  8. # 2、把aflyun用"java编程技术乐园"替换
  9. [root@localhost learn_awk]# cat aflyun
  10. flyun110
  11. Hello aflyun
  12. aflyun0315
  13. # 替换第2行
  14. [root@localhost learn_awk]# cat aflyun | sed '2s/aflyun/java编程技术乐园/'
  15. aflyun110
  16. Hello java编程技术乐园
  17. aflyun0315
  18. #替换所有行(没有地址,就是默认)
  19. [root@localhost learn_awk]# cat aflyun | sed 's/aflyun/java编程技术乐园/'
  20. java编程技术乐园110
  21. Hello java编程技术乐园
  22. java编程技术乐园0315
  23. # 三、基本编辑命令
  24. [root@localhost learn_awk]# cat aflyun
  25. aflyun110
  26. Hello aflyun
  27. aflyun0315
  28. # 1、插入命令
  29. [root@localhost learn_awk]# sed '2i java编程技术乐园' aflyun
  30. aflyun110
  31. java编程技术乐园
  32. Hello aflyun
  33. aflyun0315
  34. # 2、删除命令
  35. [root@localhost learn_awk]# sed '2d' aflyun
  36. aflyun110
  37. aflyun0315
  38. # 其他类似
  39. # 四、替换文件内容
  40. # sed -i 's/aflyun/java编程技术乐园/g' 文件名
  41. # 如果没有g标记,则只有每行第一个匹配的aflyun被替换成java编程技术乐园
  42. [root@localhost learn_awk]# cat aflyun
  43. aflyun110
  44. Hello aflyun
  45. aflyun0315
  46. [root@localhost learn_awk]# sed -i 's/aflyun/java编程技术乐园/g' aflyun
  47. [root@localhost learn_awk]# cat aflyun
  48. java编程技术乐园110
  49. Hello java编程技术乐园
  50. 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
  1. awk '{[pattern] action}' {filenames} # 行匹配语句 awk '' 只能用单引号
  • 例子
  1. # 新增一个 happy.log ,内容
  2. 2 this is a test
  3. 3 Are you like awk
  4. This's a test
  5. 10 There are orange,apple,mongo
  6. # 每行按空格或TAB分割,输出文本中的2、4项
  7. [root@localhost learn_awk]# awk '{print $1,$4}' happy.log
  8. 2 a
  9. 3 like
  10. This's
  11. 10 orange,apple,mongo
  12. # 格式化输出
  13. [root@localhost learn_awk]# awk '{printf "%-8s %-10s\n",$1,$4}' happy.log
  14. 2 a
  15. 3 like
  16. This's
  17. 10 orange,apple,mongo
  • 基本用法2
  1. awk -F #-F相当于内置变量FS, 指定分割字符
  • 例子
  1. [root@localhost learn_awk]# cat happy.log
  2. 2 this is a test
  3. 3 Are you like awk
  4. This's a test
  5. 10 There are orange,apple,mongo
  6. # 使用","分割
  7. [root@localhost learn_awk]# awk -F, '{print $1,$2}' happy.log
  8. 2 this is a test
  9. 3 Are you like awk
  10. This's a test
  11. 10 There are orange apple # 注意这里逗号没有了
  12. # 或者使用内建变量
  13. [root@localhost learn_awk]# awk 'BEGIN{FS=","} {print $1,$2}' happy.log
  14. 2 this is a test
  15. 3 Are you like awk
  16. This's a test
  17. 10 There are orange apple # 注意这里逗号没有了
  18. # 使用多个分隔符.先使用空格分割,然后对分割结果再使用","分割
  19. [root@localhost learn_awk]# awk -F '[ ,]' '{print $1,$2,$5}' happy.log
  20. 2 this test
  21. 3 Are awk
  22. This's a
  23. 10 There apple
  24. # $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

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

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

Java开发人员必须掌握的Linux命令(三)的更多相关文章

  1. Java开发人员必须掌握的Linux命令-学以致用(5)

    ================================================= 人工智能教程.零基础!通俗易懂!风趣幽默!大家可以看看是否对自己有帮助! 点击查看高清无码教程 == ...

  2. Java开发人员必须掌握的Linux命令(二)

    子曰:"工欲善其事,必先利其器." 学习应该是快乐的,在这个乐园中我努力让自己能用简洁易懂(搞笑有趣)的表达来讲解让知识或者技术,让学习之旅充满乐趣,这就是写博文的初心. 本篇的旅 ...

  3. Java开发人员必须掌握的Linux命令(一)

    子曰:"工欲善其事,必先利其器." 1.登录服务器SSH命令 简单说,SSH是一种网络协议,用于计算机之间的加密登录.如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机, ...

  4. Java开发需掌握的常用Linux命令(持续更新)

    linux命令是对Linux系统进行管理的命令.对于Linux系统来说,无论是中央处理器.内存.磁盘驱动器.键盘.鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命 ...

  5. Java开发人员必须掌握的两个Linux魔法工具(四)

    子曰:"工欲善其事,必先利其器." 做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 学习应该是快乐的,在这个乐园中我努力让自己能用简洁易懂(搞笑有趣) ...

  6. 【运维】Java开发人员掌握的Linux命令

    作为Java开发人员,要掌握常用的Linux命令. 为什么要写此文,笔者的Linux很厉害?NoNoNo,正因为笔者不熟悉Linux才写此文,以作整理. 最主要的命令 查询命令的简要用法,help 当 ...

  7. Java 程序员必须掌握的 Linux 命令

    作为一个Java开发人员,有些常用的Linux命令必须掌握.即时平时开发过程中不使用Linux(Unix)或者mac系统,也需要熟练掌握Linux命令.因为很多服务器上都是Linux系统.所以,要和服 ...

  8. Spring Boot 针对 Java 开发人员的安装指南

    Spring Boot 可以使用经典的开发工具或者使用安装的命令行工具.不管使用何种方式,你都需要确定你的 Java 版本为 Java SDK v1.8 或者更高的版本.在你开始安装之前,你需要确定你 ...

  9. 实验一 Java开发环境的熟悉(Linux+Eclipse)

    实验一 Java开发环境的熟悉(Linux+Eclipse) 实验内容及步骤 使用JDK编译.运行简单的Java程序 打开windows下的cmd → 输入cd Code命令进入Code目录 → 输入 ...

随机推荐

  1. 复习python

    1当命令行键入python a.py的方式运行python程序时候,a.py不需要执行权,当已./a.py运行时,需要执行权 2.与c语言不同的地方 i = 3 print (i)#合法 #在pyth ...

  2. 变量,id()

    >>> a = 1 >>> print id(a) 2870961640 >>> b = a >>> print id(b) 2 ...

  3. CentOS 7以上版本Nginx开机自启

    Nginx+Center OS 7.x 开机启动设置 centos 7以上是用Systemd进行系统初始化的,Systemd 是 Linux 系统中最新的初始化系统(init),它主要的设计目标是克服 ...

  4. linux 下camera调试笔记【转】

    转自:https://blog.csdn.net/kevinx_xu/article/details/8801931 linux camera调试 2011-10-23 10:43:37|  分类:  ...

  5. wget安装pip和pip3

    pip的安装 1.1 pip下载 wget "https://pypi.python.org/packages/source/p/pip/pip-1.5.4.tar.gz#md5=834b2 ...

  6. Python3学习笔记14-迭代与列表生成式

    迭代 如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration) 在Python中,迭代是通过for...in来完成的. d = ...

  7. docker在centos7系统镜像下遇到的一些问题

    一.成功安装服务后发现无法启动 报错为:Failed to get D-Bus connection: Operation not permitted 系统为centos7官方版镜像,源和依赖之类的都 ...

  8. bzoj2588 Spoj10628. count on a tree

    题目描述 给定一棵N个节点的树,每个点有一个权值,对于M个询问(u,v,k),你需要回答u xor lastans和v这两个节点间第K小的点权.其中lastans是上一个询问的答案,初始为0,即第一个 ...

  9. sga 操作命令

    用SYS用户以SYSDBA身份登录系统alter system set sga_max_size=2000m scope=spfile;alter system set sga_target=2000 ...

  10. Git学习笔记一《版本控制之道-使用Git》

    1.在Windows中安装完git后,需要进行一下配置:$ git config --global user.name "zhangliang"$ git config --glo ...