前言
一、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