Java开发人员必须掌握的Linux命令三

47次阅读

共计 5670 个字符,预计需要花费 15 分钟才能阅读完成。

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

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

前面写了两篇 Linux 的命令介绍,
1、Java 开发人员必须掌握的 Linux 命令(一)
2、Java 开发人员必须掌握的 Linux 命令(二)
前段时间看了哈利波特的一些电影,突然想到 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\n",$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 命令看成魔法来学习吧!

推荐阅读

Java 开发人员必须掌握的 Linux 命令(一)
Java 开发人员必须掌握的 Linux 命令(二)
Java 开发人员必须掌握的 Linux 命令(三)
Java 开发人员必须掌握的两个 Linux 魔法工具(四)
Java 开发人员必须掌握的 Linux 命令 - 学以致用(五)


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


<center><font color=’red’>Java 编程技术乐园 </font>:一个分享编程知识的公众号。跟着园长老司机一起学习,每天进步一点点。</center>
<p/>
<center><font color=’blue’> 扫描关注,后台回复【资源】,获取珍藏干货!99.9% 的伙伴都很喜欢 </font></center>
<p/>

<center>© 每天都在变得更好的阿飞云 </center>

正文完
 0