linux三剑客精妙招式都汇总在本文了(建议收藏)

熟悉linux的都知道,linux中有著名的三个命令,即grep、sed、awk。这三个命令被称为linux三剑客。三剑客包含各种招式众多,熟练掌握这三个命令的用法,将大大提高我们对文件的处理速度,大大提升运维效率。

本文通过具体实例,给大家分享linux三剑客grep、sed、awk相关的精妙招式,让你真正融合三剑客相关的武功招式,真正快速行走于linux江湖之中,做一个人人敬仰的侠客。

一、linux三剑客之grep

我通常把grep的招式比作横扫千军式,是因为它可以在众多文件中找到你想要的任何一个关键部分,这就类似于千军万马中取谁首级就取谁的!

grep是一种文本搜索工具,它通过用户指定的过滤条件(模式),对目标文本进行逐行匹配检查,打印出匹配到的行。

1、grep命令用法如下:

grep [参数选项] [过滤条件] 文件

其常见的参数选项如下:

-V:表示排除匹配结果;
-n:表示显示匹配行与行号;
-i:表示不区分大小写,即忽略大小写进行匹配;
-c:表示只统计匹配的行数;
-E:表示支持使用扩展的正则表达式元字符。
-w:表示只匹配过滤到的单词;
-o:表示只输出匹配到的内容;
--color=auto:表示为过滤结果添加颜色。

2、grep实战场景—

以下通过实战让大家对grep招式不再陌生。

1)找出文件haodao.txt中与haodao有关的内容,并且忽略大小写,命令如下:

[root@haodaolinux1 ~]# grep -i "haodao" haodao.txt  
HAODAO
haodao1:x:1000:1000::/home/haodao1:/bin/bash
haodao2:x:1002:1002::/home/haodao2:/bin/bash
haodao3:x:1003:1003::/home/haodao3:/bin/bash

2)找出文件haodao.txt中与haodao有关的内容,并且忽略大小写,加上行号显示,命令如下:

[root@haodaolinux1 ~]# grep -i -n "haodao" haodao.txt 
6:HAODAO
29:haodao1:x:1000:1000::/home/haodao1:/bin/bash
35:haodao2:x:1002:1002::/home/haodao2:/bin/bash
36:haodao3:x:1003:1003::/home/haodao3:/bin/bash

3)统计出文件haodao.txt中与haodao有关内容的行,忽略大小写,并且只显示行数,命令如下:

[root@haodaolinux1 ~]# grep -i -c "haodao" haodao.txt  

4)找出文件haodao.txt中存在的空行,并且将行号打印出来,命令如下:

[root@haodaolinux1 ~]# grep "^$" haodao.txt -n

5)找出文件haodao.txt中存在的空行,并且将空行排除,打印除空行外的内容,命令如下:

[root@haodaolinux1 ~]# grep "^$" haodao.txt -n -v
1:root:x:0:0:root:/root:/bin/bash
2:ROOT:x:1:1:bin:/bin:/sbin/nologin
3:root
5:ROOT
6:HAODAO
7:haohao
9:haohaolinux
10:daemon:x:2:2:daemon:/sbin:/sbin/nologin
11:#linux
13:#12345678
15:adm:x:3:4:adm:/var/adm:/sbin/nologin
16:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
17:sync:x:5:0:sync:/sbin:/bin/sync
18:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
19:halt:x:7:0:halt:/sbin:/sbin/halt
20:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
21:operator:x:11:0:operator:/root:/sbin/nologin
22:games:x:12:100:games:/usr/games:/sbin/nologin
23:ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
24:nobody:x:99:99:Nobody:/:/sbin/nologin
25:avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
26:systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin
27:systemd-network:x:998:996:systemd Network Management:/:/sbin/nologin
28:dbus:x:81:81:System message bus:/:/sbin/nologin
29:polkitd:x:997:995:User for polkitd:/:/sbin/nologin
30:tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
31:postfix:x:89:89::/var/spool/postfix:/sbin/nologin
32:sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
33:haodao1:x:1000:1000::/home/haodao1:/bin/bash
34:mysql:x:1001:1001::/home/mysql:/sbin/nologin
35:zabbix:x:996:992:Zabbix Monitoring System:/var/lib/zabbix:/sbin/nologin
36:apache:x:48:48:Apache:/opt/rh/httpd24/root/usr/share/httpd:/sbin/nologin
37:ntp:x:38:38::/etc/ntp:/sbin/nologin
38:tcpdump:x:72:72::/:/sbin/nologin
39:haodao2:x:1002:1002::/home/haodao2:/bin/bash
40:haodao3:x:1003:1003::/home/haodao3:/bin/bash

6)找出文件haodao.txt中,没有以#开头的行,并且也不是空行的内容,命令如下:

grep "^#" haodao.txt -v |grep "^$" -v

3、grep正则表达式元字符集整理:

^ :锚定行的开始 如:’^grep’匹配所有以grep开头的行。

$ :锚定行的结束 如:’grep$’匹配所有以grep结尾的行。

. :匹配一个非换行符的字符 如:’gr.p’匹配gr后接一个任意字符,然后是p。

  • :匹配零个或多个先前字符 如:’*grep’匹配所有一个或多个空格后紧跟grep的行。

[] :匹配一个指定范围内的字符,如’[Gg]rep’匹配Grep和grep。

[^] :匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep’匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。

.* :一起用代表任意字符。

… :标记匹配字符,如’love’,love被标记为1。

<word :以某单词开头

word> :以某单词结尾

x/{m/} :重复字符x,m次,如:’0{5}’匹配包含5个o的行。

x{m,} :重复字符x,至少m次,如:’o{5,}’匹配至少有5个o的行。

x{m,n} :重复字符x,至少m次,不多于n次,如:’o{5,10}’匹配5–10个o的行。

\w :匹配文字和数字字符

\b :单词锁定符,如: ‘\bgrep\b’只匹配grep。

4、grep结合正则表达式用法:

1)在文件haodao.txt中找出以haodao结尾的行,命令如下:

[root@haodaolinux1 ~]# grep  -n "haodao$" haodao.txt   
21:operator:x:11:0:operator:/root:/sbin/haodao
28:dbus:x:81:81:System message bus:/:/sbin/haodao
32:sshd:x:74:74:Privilege-separated SSH:haodao

2)找出文件haodao.txt中包含大写字母有关的行,命令如下:

[root@haodaolinux1 ~]# grep  -n [A-Z] haodao.txt  2:ROOT:x:1:1:bin:/bin:/sbin/nologin
5:ROOT
6:HAODAO
23:ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin24:nobody:x:99:99:Nobody:/:/sbin/nologin25:avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
26:systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin
27:systemd-network:x:998:996:systemd Network Management:/:/sbin/nologin
28:dbus:x:81:81:System message bus:/:/sbin/haodao
29:polkitd:x:997:995:User for polkitd:/:/sbin/nologin
30:tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
32:sshd:x:74:74:Privilege-separated SSH:haodao

二、linux三剑客之sed

sed简称流编辑器,即stream editor的缩写。sed是一个操作、过滤和转换文本内容的强大工具。常用的功能有通过结合正则表达式对文件实现快速的增删改查。最常用的查询功能是过滤(过滤指定字符串)、取行(取出指定行)。

1、sed常用语法如下:

sed [选项参数] [sed内置命令字符] 文件

1)sed常用参数选项如下:

-n:表示取消默认的sed输出,通常与sed内置命令p一起使用;
-i:表示直接将修改结果写入文件,如果不加-i,sed修改的是内存数据;
-e:表示多次编辑,不需要管道符号;
-r:表示支持正则表达式;

2)sed内置的命令字符,主要是用于对文件进行增删改查等操作,常见内置命令字符有:

a:表示对文本进行追加操作,在指定行后面添加一行或多行文本;
d:表示删除匹配行;
i:表示插入文本,在指定行前添加一行或多行文本;
p:表示打印匹配行内容,通常与-n一同使用;
s/正则/替换内容/g:表示匹配正则内容,然后替换内容(支持正则表达式),结尾g表示全局匹配;

3)sed匹配范围主要有:

空地址:表示全文处理;
单地址:表示指定文件某一行;
/pattern/:表示被模式匹配到的每一行;
范围区间:如12,22表示十二行到二十二行,如12,+5表示第12行向下5行;
步长:如1~2,表示1,3,5,7,9行;2~2,表示2,4,68,10行;

2、以下通过实际例子来练习,加深大家对sed命令的用法。

准备一个haotest01.txt文件,文件内容如下:

在这里插入图片描述

1)通过sed命令输出1行向下4行的数据,命令如下所示:

[root@haodaolinux1 ~]# sed "1,+4p" -n haotest01.txt   
He is a good BOY.
she is a girl !
I have a dream.
We will study linux.
we will study Python.

2)通过sed命令输出文件中的4到6行数据,命令如下所示:

[root@haodaolinux1 ~]# sed "4,6p" -n haotest01.txt 
We will study linux.
we will study Python.
So we will go study together.

3)通过sed命令输出有study字符串的行,命令如下所示:

[root@haodaolinux1 ~]# sed "/study/p" -n haotest01.txt 
We will study linux.
we will study Python.
So we will go study together.

4)通过sed命令将文件中的good修改替换为bad,并且输出,命令如下所示:

[root@haodaolinux1 ~]# sed "s/good/bad/g" haotest01.txt 
He is a bad BOY.
she is a girl !
I have a dream.
We will study linux.
we will study Python.
So we will go study together.
[root@haodaolinux1 ~]# cat haotest01.txt 
He is a good BOY.
she is a girl !
I have a dream.
We will study linux.
we will study Python.
So we will go study together.

此时发现只是修改输出,原文件并没有实际替换成功,这是因为sed只是修改替换内存中的数据,要加上-i才能修改原文件内容,命令如下所示:

[root@haodaolinux1 ~]# sed "s/good/bad/g" -i haotest01.txt 
[root@haodaolinux1 ~]# cat haotest01.txt                   
He is a bad BOY.
she is a girl !
I have a dream.
We will study linux.
we will study Python.
So we will go study together.[root@haodaolinux1 ~]#

如果需要在一行中多次编辑替换多个地方的数据,则要在每个sed编辑语句前加带-e选项参数。

5)通过sed命令在文件的第3行下追加一行数据,内容为:we he he,命令如下所示:

[root@haodaolinux1 ~]# sed "3a we he he" -i haotest01.txt

替换后原文件内容如下图所示:在这里插入图片描述

这里是通过内置命令符a在指定行下面追加,如果需要在指定行上面加,则要内置命令符i

如果需要在指定行下追加多行数据,可以在数据中需要换行的地方添加换行符号\n

6)sed匹配范围空地址的使用,即通过sed命令,在每一行的下面追加5个*,命令如下所示:

[root@haodaolinux1 ~]# sed "a *****" -i haotest01.txt

追加后内容如下图所示:

三、linux三剑客之awk

awk相对于其它两个剑客,功能稍微强大点。其有着强大的文本格式化能力,对文本进行复杂处理,造就了它独有绝招,同时awk还是一门编程语言,支持条件判断、数组、循环等功能。

1、awk语法如下:

awk [选项参数] '模式[动作]' 文件

这里的动作主要是指awk对文本的一些格式化处理,并且输出格式化处理后的结果,常见有print等,动作写在命令的{}里面。

1)awk常见参数有:

-F:表示指定分隔符

-v:表示定义或修改一个awk内置变量;

-f:表示从脚本中读取awk命令;

2)awk有很多内置变量,可以通过man awk查看,以下是常见的内置变量:

$0:表示完整的输入记录;

$n:表示指定分隔符后,当前指定的第n个字段;

FS:表示字段输入分隔符,默认以空格为分隔符;

OFS:表示字段输出分隔符;

NF:表示字段的个数,即以分隔符分割后,当前行一共有多少个字段;

NR:表示当前记录数,即行数;

awk涉及内容或语法比较多,想要一篇文章学完是不带现实,以下通过实例讲解它常见的那些招式,让你在日常工作中足以应付自如。

2、准备一个haotest02.txt文件,内容如下所示:

先执行以下awk命令,如下所示:

[root@haodaolinux1 ~]# awk '{print $0}' haotest02.txt 
haodao1 haodao2 haodao3
haodao4 haodao5 haodao6
haodao7 haodao8 haodao9
[root@haodaolinux1 ~]# awk '{print $1}' haotest02.txt  
haodao1
haodao4
haodao7
[root@haodaolinux1 ~]# awk '{print $2}' haotest02.txt  
haodao2
haodao5
haodao8
[root@haodaolinux1 ~]#

通过以上awk命令,针对动作{print $0}这里代表一整行输出,针对动作{print $1}代表第一列输出,针对动作{print $2}代表第二列输出。

awk默认是以空格符为分隔符,不管有多少个空格,也会当成一个来处理。

awk是按行处理文件的,一行处理完毕后,再处理下一行,并且是根据用户指定的分隔符去处理,没有指定分隔符的,则默认以空格来当作分隔符。

1)针对haotest02.txt文件,输出第1列,第3列的内容,命令如下所示:

[root@haodaolinux1 ~]# awk '{print $1$3}' haotest02.txt  
haodao1haodao3
haodao4haodao6
haodao7haodao9
[root@haodaolinux1 ~]# awk '{print $1 $3}' haotest02.txt 
haodao1haodao3
haodao4haodao6
haodao7haodao9
[root@haodaolinux1 ~]# awk '{print $1,$3}' haotest02.txt  
haodao1 haodao3
haodao4 haodao6
haodao7 haodao9
[root@haodaolinux1 ~]#

对比看出,动作中$1和$3用逗号,可以以空格输出。

可以添加自定义内容进行输出,如下命令所示:

[root@haodaolinux1 ~]# awk '{print "第1列为:"$1,"第2列为:"$3}' haotest02.txt     
第1列为:haodao1 第2列为:haodao3
第1列为:haodao4 第2列为:haodao6
第1列为:haodao7 第2列为:haodao9
[root@haodaolinux1 ~]#

2)针对haotest02.txt文件,输出第1行内容,命令如下所示:

[root@haodaolinux1 ~]# awk 'NR==1{print $0}' haotest02.txt       
haodao1 haodao2 haodao3
[root@haodaolinux1 ~]#

3)针对haotest02.txt文件,输出第2行到第3行的内容,命令如下所示:

[root@haodaolinux1 ~]# awk 'NR==2,NR==3{print $0}' haotest02.txt  
haodao4 haodao5 haodao6
haodao7 haodao8 haodao9

4)针对haotest02.txt文件,输出第2行到第3行的内容,并且加上行号,命令如下所示:

[root@haodaolinux1 ~]# awk 'NR==2,NR==3{print NR,$0}' haotest02.txt 
2 haodao4       haodao5 haodao6
3 haodao7       haodao8 haodao9
[root@haodaolinux1 ~]#

5)针对haotest02.txt文件,输出第1列的内容,并且显示出字段数(总列数),命令如下所示:

[root@haodaolinux1 ~]# awk '{print $1,NF}' haotest02.txt      
haodao1 3
haodao4 3
haodao7 3
[root@haodaolinux1 ~]#

6)针对haotest02.txt文件,输出第1列和最后一列的内容,命令如下所示:

[root@haodaolinux1 ~]# awk '{print $1,$(NF)}' haotest02.txt   
haodao1 haodao3
haodao4 haodao6
haodao7 haodao9
[root@haodaolinux1 ~]#

3、自定义分隔符,进行文件格式化后输出。

准备一个haotest03.txt文件,内容如下所示:
在这里插入图片描述

1)通过指定输入分隔符,如以:为输入分隔符,输出文件第一列的内容,命令如下所示:

[root@haodaolinux1 ~]# awk -F ":" '{print $1}' haotest03.txt 
root
bin
daemon
mail
ntp
tcpdump
haodao2
haodao3
[root@haodaolinux1 ~]#

或者通过修改系统默认输入分隔符变量(FS),进行输出,命令如下所示:

[root@haodaolinux1 ~]# awk -v FS=':' '{print $1}' haotest03.txt     
root
bin
daemon
mail
ntp
tcpdump
haodao2
haodao3
[root@haodaolinux1 ~]#

2)通过修改默认输出分隔符变量(OFS),输出文件第一列和最后一列内容,并且两列之间就是通过输出分隔符隔开的,命令如下所示:

[root@haodaolinux1 ~]# awk -F ":" -v OFS='*****' '{print $1,$NF}' haotest03.txt 
root*****/bin/bash
bin*****/sbin/nologin
daemon*****/sbin/nologin
mail*****/sbin/nologin
ntp*****/sbin/nologin
tcpdump*****/sbin/nologin
haodao2*****/bin/bash
haodao3*****/bin/bash
[root@haodaolinux1 ~]#

结语

本文通过各种实例引出三剑客各自独有的武功招式,就类似给大家呈现了绝世剑谱。俗话说的好,勤能补拙。了解江湖的都知道,一个武林高手,即所得武功绝不是一日就可以达成。必须通过不断磨练,方能成就他日的非凡成就。所以针对以上三剑客的精华妙招,我们也要通过自己不断去敲命令,方能为自己所用,真正成为武林高手!

转自:https://www.sohu.com/a/506941295_121124371关注 工 仲 好:IT运维大本营,获取60个G的《网工系统大礼包》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/623294.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python零基础从小白打怪升级中~~~~~~~TCP网络编程

TCP网络编程 一、什么是TCP协议 TCP( Transmission control protocol )即传输控制协议&#xff0c;是一种面向连接、可靠的数据传输协议&#xff0c;它是为了在不可靠的互联网上提供可靠的端到端字节流而专门设计的一个传输协议。 面向连接 &#xff1a;数据传输之前客户端和…

【环境】原则

系列文章目录 【引论一】项目管理的意义 【引论二】项目管理的逻辑 【环境】概述 【环境】原则 一、培养项目系统性思维 1.1 系统性思维 1.2 系统性思维的价值 1.3 建模和推演&数字孪生 二、项目的复杂性和如何驾驭复杂性 2.1 复杂性的三个维度 2.2 如何驾驭复杂性 三、…

民航电子数据库:[E14024]事务内变更操作次数超过最大许可值10000,可通过系统参数max_trans_modify适当调整限制

目录 一、场景二、异常情况三、原因四、排查五、解决 一、场景 1、对接民航电子数据 2、执行delete语句时报错 二、异常情况 三、原因 通过报错信息就可以看出&#xff0c;是系统参数max_trans_modify配置导致 当删除的数据量 > max_trans_modify时&#xff0c;删除就会…

BypassUAC漏洞挖掘和代码集成

什么是UAC UAC是UserAccountControl的缩写&#xff0c;即用户帐户控制。是Windows操作系统中的一种安全特性&#xff0c;旨在保护计算机不被未经授权的应用程序和操作所破坏。UAC通过提示用户是否允许某个应用程序或操作修改计算机的设置或访问敏感数据&#xff0c;来帮助用户…

【算法一则】编辑距离 【动态规划】

题目 给你两个单词 word1 和 word2&#xff0c; 请返回将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作&#xff1a; 插入一个字符 删除一个字符 替换一个字符 示例 1&#xff1a;输入&#xff1a;word1 "horse", word2 "…

MySQL学习笔记4——时间函数

MySQL时间函数 一、日期时间类型1、获取日期时间数据中部分信息的函数2、计算日期时间的函数3、其他日期时间函数 一、日期时间类型 时间函数就是用来处理时间的函数。时间&#xff0c;几乎可以说是各类项目中都会存在的数据&#xff0c;项目需求不同&#xff0c;我们需要的时…

CSS导读 (复合选择器 上)

&#xff08;大家好&#xff0c;今天我们将继续来学习CSS的相关知识&#xff0c;大家可以在评论区进行互动答疑哦~加油&#xff01;&#x1f495;&#xff09; 目录 二、CSS的复合选择器 2.1 什么是复合选择器 2.2 后代选择器(重要) 2.3 子选择器(重要) Questions 小提…

【数据可视化包Matplotlib】Matplotlib基本绘图方法

目录 一、Matplotlib绘图的基本流程&#xff08;一&#xff09;最简单的绘图&#xff08;仅指定y的值&#xff09;&#xff08;二&#xff09;更一般的绘图&#xff08;同时指定x和y的值&#xff09;&#xff08;三&#xff09;增加更多的绘图元素 二、布局相关的对象——Figur…

【XR806开发板试用】XR806在U8G2上增加MQTT+JSON控制

一、前言 U8G2移植参见之前写的文章 https://aijishu.com/a/1060000000292472本次增加MQTTJSON是站在大佬的肩膀上&#xff0c;参见 https://aijishu.com/a/1060000000284320CJSON的使用&#xff0c;参见 https://blog.csdn.net/fengxinlinux/article/details/53121287 二、成…

【C++类和对象】类和对象的引入

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…

《二》Qt Creator工具介绍与使用

一、关于界面 点击文件--->新建文件或项目会出现如下图&#xff1a; 我们选择第一个 点击下一步下一步&#xff1a; 继续下一步直到结束&#xff1a; 二&#xff0c;具体文件介绍 我们点击pro查看以下 QT core gui第1行 表示使用qt的core和gui库&#xff0c;如果以后…

VScode配置C++环境进行运行和调试

文章目录 1、配置开发环境&#xff1a;即可以安装MinGW-w64&#xff08;Windows平台的一个gcc/g编译器&#xff09;2、在VScode中安装C/C插件3、VScode的编译和运行的配置4、VScode的调试的配置 1、配置开发环境&#xff1a;即可以安装MinGW-w64&#xff08;Windows平台的一个g…