linux中shell文本处理工具

前言


一、grep命令

1.grep命令介绍

grep命令是文本搜索命令,它可以正则表达式搜索文本,也可从一个文件中的内容作为搜索关键字。

参数作用
-E等同于egrep
-i忽略大小写进行搜索
-<数字>显示过滤出来的结果上边即行和下边几行
-n显示行号
-B显示过滤上边几行
-v反向过滤要过滤的内容
-A显示要求内容的下几行
-d制定查找的是目录而非是文件
-e指定文本样式进行查找是的其可以按照字符串查找样式
-f指定规则文件规则文件中含有多个指定内容进行查找同时使得其可以进行匹配

命令练习输出能够被su切换的用户名称

cut -d : -f 1,6-7 /etc/passwd | grep "bash$" | cut -d : -f 1 

二、sed命令

1.sed命令参数解释

参数作用
-i直接对内容进行修改,不加-i时默认只是预览,不会对文件做实际修改
-e告诉sed将下一个参数解释为一个sed指令,只有当命令行上给出多个sed指令时才需要使用-e选项
-n取消默认输出,sed默认会输出所有文本内容,使用-n参数后只显示处理过的行
-f指定文件

对字符的处理命令

p显示
c替换指定内容
d删出指定内容
a添加内容
i将内容插入
w将符合的行写入
r整合内容
sed -n '5-6p' /etc/yum.repos.d/rhel8.2.repo					#显示第5到6行内容
sed -n '6p,8p' /etc/yum.repo.d/rhel.8.2.repo				#显示第6行和第8行
sed -i '/^enable/c enable=0' /etc/yum.repos.d/rhel8.2.repo	#更改文件内容并且固定内容 
sed '2s : /#/,3s :/#/' passwd								#将文件的第2,3行的:更改为#
sed '/^eanble/w passwd' rhel8.2.repo						#把rhel8.2中的行写入到repo中去进行但是会覆盖之前的内容
sed  '18i hellow:word:18' passwd 							#将内容插入到指定的行中去
sed '/^root/i hello:word:1' passwd 							#将指定的内容插入到指定的内容之前
sed -e '/^hello/c passwd' passwd 							#将内容中的指定内容进行替换
sed  's/:/#/g' passwd										#将所有的列中的:替换为#
sed  's/:/#/' passwd										#将第一列中的:替换为#

正则表达式的检索规则在sed可以通用,任意命令可以加入-i参数进行保存更改到文件中去

2.练习

练习及脚本 Apache_port.sh 此脚本接入数字 http的端口就改为此数字 假设selinux为关闭状态 例如: sh Apache_port.sh ERROR: Pleaase input port number following script !! sh Apache_port.sh 8080 apache的端口会被修改为8080

#!/bin/bash
[ -n $1 ] && {
	rpm -qa | grep httpd > /dev/null && {
	sed -e "/^Listen/c Listen "$1"" -i /etc/httpd/conf/httpd.conf > /dev/null
	systemctl restart http
	exit
	}
	exit
}||{
echo "ERROR: Pleaase input port number following script !!"
exit
}

注意脚本中''表示强引用将所有变量引用为字符不会引用为变量""表示弱引用即将引用变量

三、awk命令

1.awk命令解释

awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入、一个或多个文件,或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。awk的处理文本和数据的方式是这样的,它逐行扫描文件,从第一行到最后一行,寻找匹配的特定模式的行,并在这些行上进行你想要的操作。如果没有指定处理动作,则把匹配的行显示到标准输出(屏幕),如果没有指定模式,则所有被操作所指定的行都被处理。

参数作用
-F指定分隔符
变量作用
NR行数
NF列数
-F指定分割符号
$0表示所有的列
$1表示第一列
$2表示第二列
ip addr show eth0 | awk '/[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\/[0-9]{0,2}/{print $2 }'
									#可以将本机的ip直接过滤出来进行显示								

2.课后练习

统计在系统中能su切换的并且用户加目录不在/home下的用户数量

awk -F : '$6!~/home/&&/bash$/{print}' /etc/passwd

总结

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值