Linux三剑客的基本使用

目录

必要性

正则表达式

基础正则表达式

总览

使用

扩展正则表达式

总览

使用

grep:搜索之剑

分类

常见选项

sed:流编辑器

选项

命令

awk:数据切片

选项

命令

简单输出

判断语句


必要性

Linux三剑客是Linux和Unix系统中不可或缺的文本处理工具,它们各自具有独特的功能和优势,组合使用能够大大提高文本处理的效率、灵活性和准确性。

正则表达式

以下三种工具经常会与正则搭配使用,因此此处先进行正则知识的补充与简单演示

基础正则表达式

总览
基础正则表达式分类表
符号含义
^行首定位符
$行尾定位符
.匹配任意一个字符
*匹配多次前面的字符
[ ]匹配括号中的任意一个均可
[^]非字符类,与括号中的都不相同
[ - ]范围类,匹配一整个范围
x\{m\}匹配字符xm次
x\{m,n\}匹配字符x,次数为m-n次
使用

使用如下命令,得到测试文件test.txt

head -10 /etc/passwd > test.txt

文件内容为/etc/passwd的前十行,用于正则表达式的功能测试

搜索文件中以root开头的内容

grep ^root test.txt

搜索文件中以s开头,sync结尾的内容

grep ^s.*sync$ test.txt

搜索sy或者sh开头的内容

grep ^s[yh].* test.txt

搜索不是m开头而且不是以/sbin/nologin为家目录的用户信息

grep ^[^m].*[^/sbin/nologin]$ test.txt

搜索用户名从a-c开头的用户信息

grep ^[a-c] test.txt

搜索含有一次以上o的内容

egrep o\{1,\} test.txt

扩展正则表达式

总览
扩展正则表达式分类表
符号作用
+匹配一次或多次
匹配0次或者一次
或者
()用于进行分组
使用

匹配出现一次或者多次root的文本内容

egrep root+ test.txt

匹配以s开头而且出现了一次或者零次0的文本内容

egrep ^s.*(root)?  test.txt

匹配root开头或者a开头的文本内容

grep -E ^root|^a  test.txt

grep:搜索之剑

优点:快速搜索,支持正则,多种选项

分类

egrep:匹配时支持扩展正则,相当于grep -E

grep:最常使用,支持正则,但是不支持扩展正则,需要使用扩展正则可以-E或者使用egrep

fgrep:不支持正则

常见选项

-n 匹配时显示在文中的对应行号

-v 翻转输出,仅输出不含关键词的行

-o 仅输出匹配的部分,而不是整行内容

sed:流编辑器

优点:非交互式,脚本化,流编辑器

选项

-r:支持扩展正则

-i:直接修改文本内容

命令

d(delete)删除

删除root开头的内容

sed -r '/^root/d' test.txt

s(substitute)替换

将文中的root全部替换为ROOT

sed -r 's/root/ROOT/' test.txt

i(insert)插入

在第二行后面插入一行内容

sed -r '2i/root/' test.txt

c(change)更改

此处的修改时修改一整行,通常用于主配置文件来实现服务的关闭与开启

sed -ri 'c/^SELINUX=.*$/SELINUX=disabled/' /etc/selinux/config

使用上述命令可以直接实现Selinux的关闭,并且不需要进行交互,便于脚本内容的书写

awk:数据切片

优点:格式化输出,内置函数和变量,文本分析和处理

基本语法:

awk 选项 语法 文件名

使用文件:/etc/passwd

文件内容解释:

以root用户为例

一共有七项,第一项为用户名root,第二项为密码占位符,第三项为uid,第四项为gid,第五项为用户描述信息,第七项为用户家目录,第八项为用户登录shell

选项

-v:设置自定义变量,在后续命令中进行使用

内部变量及其作用:

常见内置变量表
变量名含义
FS输入字段分隔符
OFS输出字段分隔符
RS输入记录分隔符
ORS输出记录分隔符

-F:设置输入字段分隔符,相当与定义FS的值

处理前操作:BEGIN{}   

处理操作:{}

处理后操作:END{}

命令

print 直接进行输出

也可以进行比较 常用运算符号 > < == ~ 

还可以进行流程控制

使用if语句,for循环,while循环等

简单输出
awk -F: -v user=root 'BEGIN{print "begin"}{if($1==user){print $1}}END{print "end"}' /etc/passwd
判断语句

使用判断语句统计系统用户与非系统用户的数量

系统用户id<1000,非系统用户id>1000

awk -F: 'BEGIN{usera=0;userb=0} {if($3<1000){usera++}else{userb++}} END{print "系统用户数量为:"usera,"非系统用户数量为:"userb}' /etc/passwd
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

河中医第一IKUN

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值