自动化运维[shell编程]——————text测试命令、grep搜索、sed行编辑器、awk列编辑器

本文详细介绍了Linux自动化运维中的文本测试命令text,包括-a、-o、-n、-z等选项的使用。接着讲解了grep的强大搜索功能,以及sed文本编辑器的d、i、a、p等命令的实践应用。最后,文章深入探讨了awk列编辑器的工作原理、语法格式及各种查询和处理技巧,如按行号、信息、列进行查找和操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. text测试语句

shell环境中测试条件表达式工具text的使用方法:

test 条件1 [选项] 条件2
[ 条件1 [选项] 条件2 ]
选项:
-a:两个条件都为真
-o:两个条件有一个为真
 =:字符串是否相等,若相等返回true
!=:字符串是否不等,若不等返回true 


test [选项] 变量
[ [选项] 变量 ]
选项:
-n:字符串的长度非零
-z:字符串的长度是否为零


test file1 [选项] file2
[ file1 [选项] file2]
选项:
-ef:两个文件是否为同一个文件,可用于硬连接。主要判断两个文件是否指向同一个inode(节点)。
-nt:判断文件1是否比文件2新
-ot:判断文件1比是否文件2旧 


test [选项] file
[ [选项] file ]
选项:
-b:文件是否块设备文件 
-c:文件并且是字符设备文件
-d:文件并且是目录 
-e:文件是否存在*
-f:文件是否为正规文件*
-L: 文件是否是一个符号链接(同-h) 

这里的test和符号[ ]的作用是一样的,[ ]与内容之间一定要有空格。

1.1 -a与-o

使用-a选项,两个条件同时成立,输出yes,反之为no。

在这里插入图片描述
由此可以测试得-a选项,必须两个条件都为真,结果才为真

使用-o选项,两个条件中只要有一个选项成立,输出结果就为yes,反之为no。

在这里插入图片描述

1.2 -n与-z

两者的作用刚好是相反的:

  • -n:如果变量有值则为yes,变量为空为no(判断是否有值
  • -z:如果变量有值则为no,变量为空为yes(判断是否没有值

在这里插入图片描述在这里插入图片描述

1.3 =、!=

=:字符串是否相等,若相等返回true
!=:字符串是否不等,若不等返回true

在这里插入图片描述

1.4 -ef、-nt与-ot

两个文件是否为同一个文件,可用于硬连接。主要判断两个文件是否指向同一个i节点,同一个i节点表示对应同一个盘符

在这里插入图片描述
-nt判断文件1是否比文件2新(new)
-ot判断文件1比是否文件2旧(old)

在这里插入图片描述

1.5 -b,-c,-d,-e,-f,-L

test [选项] file
[ [选项] file ]
选项:
-b:文件是否块设备文件 
-c:文件并且是字符设备文件
-d:文件并且是目录 
-e:文件目录是否存在*
-f:文件是否为正规文件*
-L: 文件是否是一个符号链接(同-h) 

在这里插入图片描述
在这里插入图片描述

2.grep搜索

grep:强大的搜索工具

grep [搜索内容] 文件名
grep [搜索内容] 文件名1 文件名2 文件名3 ……
grep -E "[1-9]+" = egrep "[1-9]+" # 使用扩展正则表达式

grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。用于过滤/搜索的特定字符。可使用正则表达式能多种命令配合使用,使用上十分灵活。

开始做测试,首先建立一个实验文件:
在这里插入图片描述
x*y:表示任意多个x后紧跟一个y,中间不能有任何的字符
在这里插入图片描述

x...y:表示x和y之间有3个任意字的符
在这里插入图片描述
xy+:表示y出现1到任意多次
在这里插入图片描述
x??y:表示x出现0-2次
在这里插入图片描述
\<x{1}y\>:表示内容为xy的行
在这里插入图片描述

(xy){2}:含有xyxy的行
在这里插入图片描述

3.sed文本编辑器

sed:功能强大的流式文本编辑器,他即可以编辑文件,号可以接收改变命令的结果

sed 是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响。

处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。

文件内容并没有改变,除非你使用重定向存储输出。

Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。

sed '[动作]' 选项 文件名

条件:
d:删除
i:上一行增加
a:下一行增加
p:打印要与选项-n连用有效果
c:替换
w:结果写入其他文件
=:前一行添加行号
G:下一行添加空行
N:一次处理两行

选项:
-e:与;意思相同,允许执行多条sed命令编辑
-f:使用文件中的条件
-n:只显示指定操作的结果,不加显示全文
-i:用sed修改结果直接该文件中的内容,而不是由屏幕输出。


sed 's/指定内容/替换内容/g' 选项 文件名
sed 's@指定内容@替换内容@g' 选项 文件名
s:行
g:列

我们直接使用fstab的复制文件来进行实验
在这里插入图片描述

3.1 d

3.1.1 删除指定字符开头行

删除选择的内容,可以给之前添加表示删除选择内容之外的其他所有
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3.1.2 删除指定的行

如果要直接删除指定的行

1,4d # 删除1-4行
1d;4d # 删除第1行和第4行

在这里插入图片描述

在这里插入图片描述

3.1.3 删除空行

/^$/d # ^表示开头,$表示结尾

在这里插入图片描述

3.2 i与a

3.2.1 i

i(在当前行上面插入文本)动作模式

在这里插入图片描述

在这里插入图片描述

3.2.2 a

a(在当前行下面添加文本)动作

在这里插入图片描述
在这里插入图片描述

3.3 p

p打印模式,打印模式下要使用-n选项,不使用-n结果会显示出全文,打印指定行 就没有意义了。

3.3.1 打印指定字符开头行

在这里插入图片描述

在这里插入图片描述

如果不加-n选项

在这里插入图片描述

3.3.2 打印指定行

在这里插入图片描述

在这里插入图片描述

3.4 w

将检索出来的行保存在指定的文件中

在这里插入图片描述
在这里插入图片描述

3.5 c

替换一行的内容

在这里插入图片描述

3.6 =

给指定行前一行添加行号

在这里插入图片描述
在这里插入图片描述
给每一行添加行号:
在这里插入图片描述

如果多次添加了行号,可以使用删除数次开头行的方式恢复
在这里插入图片描述
在这里插入图片描述

3.7 -i

这样就可以将你的修改写入源文件中

在这里插入图片描述

3.8 -e

-e代表;的作用,你可以在以条命令中匹配多个选定内容

在这里插入图片描述在这里插入图片描述

3.9 -f

使用条件文件来修改指定文件

在这里插入图片描述

在这里插入图片描述

3.10 / @

也可以像vim中的方式,来使用sed选择:

3.10.1 所有行所有列

在这里插入图片描述
在这里插入图片描述

3.10.2 没有g表示第一列

在这里插入图片描述在这里插入图片描述

3.10.3 指定行

在这里插入图片描述
在这里插入图片描述

3.11 G

给指定的行加空行:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.12 N

一次处理两行:

在这里插入图片描述
在这里插入图片描述

4.awk

4.1 什么是awk

在linux中查找到awk的全称是gawk:
在这里插入图片描述
他是awk的GNU版本。
我们通过man查看这个命令的说明:
在这里插入图片描述
这就是比较

4.2 awk的工作

awk主要是用来处理文件的,他主要是用来处理日志文件。配置文件通常使用sed命令来处理,因为sed可以使用-i选项将内存中的数据直接保存进磁盘里,改变配置文件,awk和grep都没有这个功能。

awk处理文件的方式主要有:

  • 排除信息
  • 查询信息
  • 统计信息
  • 替换信息(输出的信息被替换,源文件不变)

4.3 执行原理

对一个文件进行awk操作就是:

  • 将这个文件一行一行的读取,直到读取到最后一行。
  • 读取的时候进行判断,是否是需要的信息。
  • 匹配条件,对满足的行进行处理执行的动作。
  • 不满足就开始读取下一行。

4.4 语法格式

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

参数:
-F 设定分割符

awk中的正则
在这里插入图片描述
awk中的内置变量

在这里插入图片描述

4.3.1 按照行号查询信息

显示文件的第二行

awk 'NR==2' 文件

在这里插入图片描述

显示文件的第二行到第四行:

awk 'NR==2,NR==4' 文件
awk 'NR>=2&&NR<=4' 文件 

在这里插入图片描述
在这里插入图片描述

显示文件的第二行和第四行 :

awk 'NR==2;NR==4' 文件
awk 'NR==2||NR==4' 文件

在这里插入图片描述
在这里插入图片描述

查询文件一共有几行:

awk '{print NR}' 文件

在这里插入图片描述

4.3.2 按照信息查询

查询一个关键信息:

awk '/关键信息1/' 文件

在这里插入图片描述

查询一个关键信息到另一个关键信息中间所有的行:

awk '/关键信息1/,/关键信息2/' 文件

在这里插入图片描述

查询一个关键信息和另一个关键信息:

awk '/关键信息1/;/关键信息2/' 文件

在这里插入图片描述

打印查询到关键字行的第一列:

awk -F : '/bash/{print $1}' 文件

在这里插入图片描述

4.3.3 按照列进行查找

以:作为分割符输出第一列。

awk -F : '{print $1}' 文件

在这里插入图片描述输出第一列和第三列:

awk -F : '{print $1"\t"$3}' 文件

在这里插入图片描述
输出第一行的第一列和第三列:

awk -F : 'NR==1{print $1"\t"$3}' 文件
awk -F : 'NR==1{print $1,$3}' 文件 # 中间自动分一个空格

在这里插入图片描述
在这里插入图片描述

输出含有root关键字的第一列和第三列:

awk -F : '/root/{print $1"\t"$3}' 文件

在这里插入图片描述

查询每一行有几列:

awk -F : '{print NF}' 文件

在这里插入图片描述
输出第三行的第一列:

awk -F : 'NR==3{print $1}' 文件

在这里插入图片描述

4.3.4 BEGIN END

在命令格式上分别体现如下 :

BEGIN{}:读入第一行文本之前执行,一般用来初始化操作
{}:逐行处理,逐行读入文本执行相应的处理,是最常见的编辑指令
END{}:处理完最后一行文本之后执行 , 一般用来输出处理

我们设定实验每行读取文件开始前打印username,读取完之后打印共有几个用户

awk -F : 'BEGIN{print "username"}{print $1}END{print NR}' 文件

在这里插入图片描述

4.3.5 设定变量n

还可以设定一个变量,让变量在每一行加一给用户编号:

awk -F : 'BEGIN{n=1;print "username"}{print n++,$1}END{print "over"}' 文件

在这里插入图片描述

4.3.6 特殊用法

输出每一行

awk '{print $0}' 文件

在这里插入图片描述
计算34+12

awk 'BEGIN{a=34;print a+12}'

在这里插入图片描述

输出以a、b、c或d开头的行

awk '/^[a-d]/' 文件

在这里插入图片描述

输出不以a、b、c或d开头的行

awk '/^[^a-d]/' 文件
awk '!/^[a-d]/' 文件

在这里插入图片描述

输出以a、b、c或d开头或者以bash结尾的行

awk '/^[a-d]|bash$/' 文件
awk '/^[a-d]/||/bash$/' 文件

在这里插入图片描述

输出以a、b、c或d开头且以bash结尾的行

awk '/^[a-d]&bash$/' 文件
awk '/^[a-d]/&&/bash$/' 文件

在这里插入图片描述

打印第六列以bin结尾的行:

awk -F : '$6~/bin$/' 文件 # $6~:表示文件的第六列匹配正则表达式
awk -F : '$6~/\<bin$/' 文件 # \<the\> 只能匹配单词,就是只能匹配the apple中的the ,不能匹配otherwise中的the

在这里插入图片描述
在这里插入图片描述

输出文件名:

awk '{print FILENAME}' 文件
awk '{print $1}END{print FILENAME}' 文件

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值