Linux自动化运维工程师--(2)文本处理工具

Linux自动化运维工程师

实验所用系统为Redhat-rhel8.2。

目录

  • Linux自动化运维工程师
  • Linux自动化运维工程师--文本处理工具
    • 一、grep命令
      • 1、grep简介
      • 2、grep命令格式
      • 3、grep字符数量匹配规则
    • 二、sed命令
      • 1、sed简介
      • 2、sed命令格式
        • 1)对字符的处理
        • 2)sed字符替换
    • 三、awk
      • 1、awk简介
      • 2、awk命令格式
      • 3、变量
      • 4、条件

实验环境:
一台配置好网络软件仓库和IP的虚拟机

Linux自动化运维工程师–文本处理工具

一、grep命令

1、grep简介

grep [Globally search a Regular Expression and Print]命令用于查找文件里符合条件的字符串。全局搜索正则表达式,搜索模式为贪婪模式,只要包含关键字就会被搜索出来
grep 指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为 -,则 grep 指令会从标准输入设备读取数据。

grep				##只支持基础的正则表达式
grep -E = egrep		##支持基础和扩展的正则表达式

2、grep命令格式

grep 匹配条件 处理文件

grep root passwd			#过滤root关键字
grep -i root passwd 		##后略大小写
grep -E "\<root" passwd		##root字符之前不能有字符
grep -E "root\>" passwd		##root字符之后不能有字符
grep -数字					##显示过滤行以及上面几行和下面几行
grep -n 					##显示匹配的行所在行号
grep -A						##显示过滤行以及下面几行
grep -B						##显示过滤行以及上面几行
grep -v						##反向过滤

实验步骤:
切入到/mnt,复制/etc/passwd到当前文件夹,并截取部分内容以便做实验。
搜索含有root关键字的行。
请添加图片描述
搜索含有root和nologin关键字的行。
请添加图片描述
向passwd文件中加入一行,内容为ROOT。忽略大小写搜索含有root的行。
请添加图片描述
搜索符合条件root前后不能有字符的行。搜索含有halt字符的行并显示行号。
请添加图片描述
搜索过滤行以及上面几行和下面几行。
请添加图片描述
反向过滤,搜索不含root的行。
请添加图片描述

3、grep字符数量匹配规则

^westos				##以westos开有
westos$				##以westos结尾
w....s				##w开头s结尾中间4个任意字符
.....s				##s结尾前面5个任意字符
*					##字符出现任意
?					##0到1次
+					##1次到任意次,至少1次
{n}					##n次
{m,n}				##m到n次
{0,n}				##0-n次
{,n}				##0-n次
{m,}				##最少m次
(lee){2}			##lee字符串出现2次

实验步骤:
搜索以root开头的行,搜索以root结尾的行。
请添加图片描述
编辑westos文件作为实验素材。
请添加图片描述

请添加图片描述
请添加图片描述

  • 练习:请显示系统中能被su命令切换的用户名称(/bash /sh)
    在/etc/passwd文件里搜索以bash或者sh结尾的用户,并以:隔开截取第一列。
    请添加图片描述
    请添加图片描述

二、sed命令

1、sed简介

Linux sed 命令是利用脚本来处理文本文件。
sed 可依照脚本的指令来处理、编辑文本文件。
Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。
sed是非交互式的编辑器。它不会修改文件,除非使用shell重定向来保存结果。默认情况下,所有的输出行都被打印到屏幕上。
sed编辑器逐行处理文件(或输入),并将结果发送到屏幕。具体过程如下:首先sed把当前正在处理的行保存在一个临时缓存区中(也称为模式空间),然后处理临时缓冲区中的行,完成后把该行发送到屏幕上。sed每处理完一行就将其从临时缓冲区删除,然后将下一行读入,进行处理和显示。处理完输入文件的最后一行后,sed便结束运行。sed把每一行都存在临时缓冲区中,对这个副本进行编辑,所以不会修改原文件。

2、sed命令格式

sed 参数 命令 处理对象
sed 参数 处理对象 -f 处理规则文件
-e	##表示多条策略的执行

1)对字符的处理

  1. p--显示
p							##显示
sed -n  5p westos			##显示第五行
sed -n  3,5p westos			##显示3到5行
sed -ne  '3p;5p' westos		##显示3和5行
sed -ne 1,5p westos			##1-5行
sed -ne '5,$p'	westos		##5到最后一行
sed -n '/^#/p' fstab		##显示以#开头的行	

实验:
打印第五行内容。
请添加图片描述
打印第三行到第五行的内容。
请添加图片描述
打印第三行和第五行的内容。,不输出模式空间内的内容,只输出被处理过的内容。
请添加图片描述
打印指定内容的行。
请添加图片描述

  1. d--删除
d							##删除
sed 5d	westos				##删除第五行
sed '/^#/d'	fstab			##把#开头的行删除
sed '/^UUID/!d' fstab		##除了UUID以外的行都删除
sed -e '5,$d' westos		##删除第五行到最后一行

实验:
删除第五行。
请添加图片描述
删除5-8行;删除第5行和第8行。
请添加图片描述
删除指定内容的行。
请添加图片描述

  1. a--添加
a									##添加
sed -e '$a hello world' fstab		##添加一行内容,默认为最后一行
sed -e '$a hello\nworld' fstab		##添加hello,换行添加world,\n表示换行
sed -e '/^#/a hello world' fstab	##在以#开头的行后添加内容

实验:
在指定位置添加内容。
请添加图片描述

  1. c--替换
sed -e '/^#/c hello world' fstab	##将以#开头的行替换为指定内容
sed '5chello world' westos			##将第五行替换为指定内容

实验:
请添加图片描述

  1. w--把符合的行写到指定文件中
sed '/^UUID/w westofile' westos		##把westos中UUID开头的行写入westosfile中

实验:
请添加图片描述

  1. i--插入(默认在指定内容上一行)
sed '5ihello westos' westos		##在第五行插入指定内容

实验:
-i参数默认添加在指定行上一行,-a参数默认添加在指定行下一行。
请添加图片描述

  1. r--整合文件(默认在在指定行下一行)
sed '5r haha' westos		##将haha文件中的内容整合到westos文件的第五行后

实验:
请添加图片描述请添加图片描述

2)sed字符替换

s--所有的行
g--所有的列,如果不加,默认为每行出现的第一列
sed 's/:/###/g' passwd 						##将所有的:替换成###
sed 's/:/###/' passwd 						##将所有第一列的:替换成###			
sed '1,5s/:/###/g' passwd 					##第1行到第5行(使用;隔开)
sed -e '1s/:/###/g' -e '5s/:/###/g' passwd	##第1行和第5行(用两个-e连接两个替换策略)
sed '1s/:/###/g' passwd 					##第1行
sed '1s/:/###/g;5s/:/###/g' passwd 			##第1行和第5行
sed '/lp/,/shutdown/s/:/###/g' passwd  	 	##lp开头,shutdown结尾
sed 's/\//####/g' passwd 					##所有的/替换成###
sed 's@/@####@g' passwd 					##所有的/替换成###
sed '=' passwd								##=表示给文件中的每一行前加行号,默认加在每一行的前一行
sed '=' passwd | sed 'N;s/\n/ /g'			##将行号加在每一行前,通过管道将行号后的换行符\n替换为空格(N表示提前加载sed处理行的下一行)
sed '=' passwd | sed 'N;s/\n/ /g' > westos 	##重定向生成文件
sed 'G' passwd								##G表示给westos文件的每一行后添加空行
sed '$!G' passwd 							##除最后一行外给westos文件的每一行后添加空行

实验:
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

[注意] 使用sed命令将passwd文件中第1行和第5行每一列中的:替换为###,有两种方式:一种是在一个替换策略里将两个条件用;隔开,另一种是使用两个-e参数连接两个替换策略。

请添加图片描述
请添加图片描述

[注意] “\”为转义符,表示其后所跟的“/”是有意义的。

请添加图片描述
请添加图片描述
请添加图片描述请添加图片描述
请添加图片描述
或者编写一个规则文件,将passwd文件中的nologin替换成westos。

请添加图片描述

  • 练习:编写一个脚本Apache_port.sh,此脚本后接数字,即设定http端口改为此数字,假设selinux为关闭状态。
    例如:
sh Apache_port.sh
ERROR: Pleaase input port number following script !!

sh Apache_port.sh 8080
apache的端口会被修改为8080
  • 思路解析:
    首先设定selinux状态,其次检测脚本执行时是否输入数字,没有则退出,然后检测http服务是否安装,没有则安装,安装需检测网络软件仓库是否完备,没有则报错退出,已安装则检测服务是否开启,没有则开启,已开启则检测输入的数字端口是否被占用,没有被占用则修改,被占用则报错退出,修改完成后重启服务,并输出端口检测。
    请添加图片描述
    请添加图片描述
    请添加图片描述
    请添加图片描述
    请添加图片描述

三、awk

1、awk简介

AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。Awk是为高级文本处理而设计的通用脚本语言。主要用作报告和分析工具。
awk处理过程: 依次对每一行进行处理,然后输出。

2、awk命令格式

awk -F 分隔符 BEGIN{}{}END{} FILENAME

用法:

awk -F : '{print $1}' passwd		##显示第一列
awk -F : '{print $1,$2}' passwd 	##显示第一列和第二列,“,”表示分隔符为空格
awk -F : '{print $1":"$2}' passwd 	##显示第一列和第二列,“:”为分隔符,需转义
awk -F : 'BEGIN{print "name"}{print $1}END{print "end"}' passwd		
##显示第一列,以name开头,end结束
##BEGIN表示运行处理策略前做的动作;"name"字符串不加引号表示变量,加引号表示字符串本身;
##{print $1}表示需要处理的动作;END表示处理结束动作之后要做的事情

请添加图片描述
请添加图片描述
请添加图片描述

3、变量

NR			#行数
NF 			#列数
FILENAME	#文件名称本身
westos		#westos变量值
“westos” 	#westos字符串

实验:

awk -F : '{print NR}' passwd 						##显示所处理文件的行数
awk -F : '{print NF}' passwd						##显示所处理文件的每一行的列数
awk -F : '{print FILENAME}' passwd 					##显示所处理的文件名称
awk -F : 'BEGIN{westos=1}{print westos}' passwd 	##显示westos(变量)的值,此时passwd文件的作用是提供所要显示的行数
awk -F : 'BEGIN{westos=1}{print "westos"}' passwd 	##显示westos(字符串)本身
awk -F : 'BEGIN{westos=1}{westos++}END{print westos}' passwd	##每处理一行westos加一,处理所有行之后打印westos的值

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

4、条件

/bash$/				##条件
/条件1|条件2/		##条件1或者条件2(一个条件中两个元素)
/条件1/||/条件2/		##条件1或者条件2(两个条件)
/条件1/&&/条件2/		##条件1并且条件2

[注意] 没有一个条件中两个元素的并且关系,只有两个条件的并且关系

实验:

awk -F : '/nologin$/{print $1,$7}' passwd 	
##显示以nologin结尾的行的第一列和第七列
awk -F : '/nologin$|^root/{print $1,$7}' passwd 
##显示以nologin结尾或者以root开头的行的第一列和第七列(一个条件中两个元素为或者关系)
awk -F : '/nologin$/||/^root/{print $1,$7}' passwd 	
##显示以nologin结尾或者以root开头的行的第一列和第七列(两个条件为或者关系)
awk -F : '/bash$/&&/^root/{print $1,$7}' passwd		
##显示以bash结尾以root开头的行的第一列和第七列(两个条件的并且关系)

请添加图片描述
请添加图片描述请添加图片描述

$0			#所有的列
$1			#第一列
$2			#第二列
$3			#第三列

实验:

awk -F : '{print $0}' passwd 		##显示passwd文件的所有列
awk -F : '{print $1}' passwd		##显示passwd文件的第一列

请添加图片描述

awk -F : '$7~/bash$/{print $0}' passwd 		##passwd文件中第七列是bash结尾的行
awk -F : '$7!~/bash$/{print $0}' passwd		##passwd文件中第七列不是bash结尾的行

请添加图片描述

  • 练习:统计在系统中能su切换的并且用户家目录不在/home下的用户数量
  • 思路解析:能被su切换的用户默认shell为/bin/bash或者/sh,其次家目录为/home,则在/etc/passwd里搜索以/bash或者/sh结尾并且不以/home开头的用户,使用变量自加的方式统计数量。
    请添加图片描述

[注意] /home中的“/”需要转义,因为“/”指的是根目录。

  • 练习:使用awk的一条命令抓取ens3网卡的ip
  • 思路解析:先使用ifconfig ens3命令观察输出。ip在inet后,即inet为第一列,ip为第二列,抓取inet,其前后都没有字符,输出第二列。
ifconfig ens3 | awk '/\<inet\>/{print $2}'

请添加图片描述

热门文章

暂无图片
编程学习 ·

Java输出数组的内容

Java输出数组的内容_一万个小时-CSDN博客_java打印数组内容1. 输出内容最常见的方式// List<String>类型的列表List<String> list new ArrayList<String>();list.add("First");list.add("Second");list.add("Third");list.ad…
暂无图片
编程学习 ·

母螳螂的“魅惑之术”

在它们对大蝗虫发起进攻的时候&#xff0c;我认认真真地观察了一次&#xff0c;因为它们突然像触电一样浑身痉挛起来&#xff0c;警觉地面对限前这个大家伙&#xff0c;然后放下自己优雅的身段和祈祷的双手&#xff0c;摆出了一个可怕的姿势。我被眼前的一幕吓到了&#xff0c;…
暂无图片
编程学习 ·

疯狂填词 mad_libs 第9章9.9.2

#win7 python3.7.0 import os,reos.chdir(d:\documents\program_language) file1open(.\疯狂填词_d9z9d2_r.txt) file2open(.\疯狂填词_d9z9d2_w.txt,w) words[ADJECTIVE,NOUN,VERB,NOUN] str1file1.read()#方法1 for word in words :word_replaceinput(fEnter a {word} :)str1…
暂无图片
编程学习 ·

HBASE 高可用

为了保证HBASE是高可用的,所依赖的HDFS和zookeeper也要是高可用的. 通过参数hbase.rootdir指定了连接到Hadoop的地址,mycluster表示为Hadoop的集群. HBASE本身的高可用很简单,只要在一个健康的集群其他节点通过命令 hbase-daemon.sh start master启动一个Hmaster进程,这个Hmast…
暂无图片
编程学习 ·

js事件操作语法

一、事件的绑定语法 语法形式1 事件监听 标签对象.addEventListener(click,function(){}); 语法形式2 on语法绑定 标签对象.onclick function(){} on语法是通过 等于赋值绑定的事件处理函数 , 等于赋值本质上执行的是覆盖赋值,后赋值的数据会覆盖之前存储的数据,也就是on…
暂无图片
编程学习 ·

Photoshop插件--晕影动态--选区--脚本开发--PS插件

文章目录1.插件界面2.关键代码2.1 选区2.2 动态晕影3.作者寄语PS是一款栅格图像编辑软件&#xff0c;具有许多强大的功能&#xff0c;本文演示如何通过脚本实现晕影动态和选区相关功能&#xff0c;展示从互联网收集而来的一个小插件&#xff0c;供大家学习交流&#xff0c;请勿…
暂无图片
编程学习 ·

vs LNK1104 无法打开文件“xxx.obj”

写在前面&#xff1a; 向大家推荐两本新书&#xff0c;《深度学习计算机视觉实战》和《学习OpenCV4&#xff1a;基于Python的算法实战》。 《深度学习计算机视觉实战》讲了计算机视觉理论基础&#xff0c;讲了案例项目&#xff0c;讲了模型部署&#xff0c;这些项目学会之后可以…
暂无图片
编程学习 ·

工业元宇宙的定义与实施路线图

工业元宇宙的定义与实施路线图 李正海 1 工业元宇宙 给大家做一个关于工业元宇宙的定义。对于工业&#xff0c;从设计的角度来讲&#xff0c;现在的设计人员已经做到了普遍的三维设计&#xff0c;但是进入元宇宙时代&#xff0c;就不仅仅只是三维设计了&#xff0c;我们的目…
暂无图片
编程学习 ·

【leectode 2022.1.15】完成一半题目

有 N 位扣友参加了微软与力扣举办了「以扣会友」线下活动。主办方提供了 2*N 道题目&#xff0c;整型数组 questions 中每个数字对应了每道题目所涉及的知识点类型。 若每位扣友选择不同的一题&#xff0c;请返回被选的 N 道题目至少包含多少种知识点类型。 示例 1&#xff1a…
暂无图片
编程学习 ·

js 面试题总结

一、js原型与原型链 1. prototype 每个函数都有一个prototype属性&#xff0c;被称为显示原型 2._ _proto_ _ 每个实例对象都会有_ _proto_ _属性,其被称为隐式原型 每一个实例对象的隐式原型_ _proto_ _属性指向自身构造函数的显式原型prototype 3. constructor 每个prot…
暂无图片
编程学习 ·

java练习代码

打印自定义行数的空心菱形练习代码如下 import java.util.Scanner; public class daYinLengXing{public static void main(String[] args) {System.out.println("请输入行数");Scanner myScanner new Scanner(System.in);int g myScanner.nextInt();int num g%2;//…
暂无图片
编程学习 ·

RocketMQ-什么是死信队列?怎么解决

目录 什么是死信队列 死信队列的特征 死信消息的处理 什么是死信队列 当一条消息初次消费失败&#xff0c;消息队列会自动进行消费重试&#xff1b;达到最大重试次数后&#xff0c;若消费依然失败&#xff0c;则表明消费者在正常情况下无法正确地消费该消息&#xff0c;此时…
暂无图片
编程学习 ·

项目 cg day04

第4章 lua、Canal实现广告缓存 学习目标 Lua介绍 Lua语法 输出、变量定义、数据类型、流程控制(if..)、循环操作、函数、表(数组)、模块OpenResty介绍(理解配置) 封装了Nginx&#xff0c;并且提供了Lua扩展&#xff0c;大大提升了Nginx对并发处理的能&#xff0c;10K-1000K Lu…
暂无图片
编程学习 ·

输出三角形

#include <stdio.h> int main() { int i,j; for(i0;i<5;i) { for(j0;j<i;j) { printf("*"); } printf("\n"); } }
暂无图片
编程学习 ·

stm32的BOOTLOADER学习1

序言 最近计划学习stm32的BOOTLOADER学习,把学习过程记录下来 因为现在网上STM32C8T6还是比较贵的,根据我的需求flash空间小一些也可以,所以我决定使用stm32c6t6.这个芯片的空间是32kb的。 #熟悉芯片内部的空间地址 1、flash ROM&#xff1a; 大小32KB&#xff0c;范围&#xf…
暂无图片
编程学习 ·

通过awk和shell来限制IP多次访问之学不会你打死我

学不会你打死我 今天我们用shell脚本&#xff0c;awk工具来分析日志来判断是否存在扫描器来进行破解网站密码——限制访问次数过多的IP地址&#xff0c;通过Iptables来进行限制。代码在末尾 首先我们要先查看日志的格式&#xff0c;分析出我们需要筛选的内容&#xff0c;日志…
暂无图片
编程学习 ·

Python - 如何像程序员一样思考

在为计算机编写程序之前&#xff0c;您必须学会如何像程序员一样思考。学习像程序员一样思考对任何学生都很有价值。以下步骤可帮助任何人学习编码并了解计算机科学的价值——即使他们不打算成为计算机科学家。 顾名思义&#xff0c;Python经常被想要学习编程的人用作第一语言…
暂无图片
编程学习 ·

蓝桥杯python-数字三角形

问题描述 虽然我前后用了三种做法&#xff0c;但是我发现只有“优化思路_1”可以通过蓝桥杯官网中的测评&#xff0c;但是如果用c/c的话&#xff0c;每个都通得过&#xff0c;足以可见python的效率之低&#xff08;但耐不住人家好用啊&#xff08;哭笑&#xff09;&#xff09…