IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> shell中的文本处理工具(grep,sed,awk) -> 正文阅读

[系统运维]shell中的文本处理工具(grep,sed,awk)

一、grep

文本搜索工具,可以使用正则表达式搜索文本,把匹配的行打印出来

  • grep支持正则表达式
  • egrep支持扩展的正则表达式
  • grep -E= egrep

1、grep的格式

grep 匹配条件 处理文件
-i忽略大小写
-E “\<root"root字符之前不能有字符
-E ”root\>“root字符之后不能有字符
-数字显示过滤行以及上面几行和下面几行
-n显示匹配的行所在行号
-A显示过滤行以及下面几行
-B显示过滤行以及上面几行
-v反向过滤

建立实验素材:
在这里插入图片描述

grep -E "bash$|nologin$" passwd  ##过滤以bash结尾或nologin结尾的行
grep -i root passwd  ##过滤含root关键字的行,不分大小写
grep -iE "\<root\>" passwd  ##过滤root关键字前后都没有字符的行,不分大小写

在这里插入图片描述

grep -1 ROOT passwd  ##显示含root的行,以及上下各一行
grep -A 2 -B 1 -n ROOT passwd  ##显示含root的行,以及上1行,下2行,均显示行号
grep root passwd | grep -E "^root" -v  ##显示root在结尾或中间的行,即反向过滤root在开头

在这里插入图片描述

2、grep字符数量匹配规则

^root以root开头
root$以root结尾
s...ks开头k结尾中间任意3个字符
....kk结尾前后4个任意字符
*字符出现任意
?0到1次
+1到任意次
{n}n次
{m,n}m到n次
{0,n}0-n次
{,n}0-n次
{m,}最少m次
(skk){6}skk字符串出现6次

建立实验素材:
在这里插入图片描述

grep -E 's.{2,4}s' grepfile  ##s和s之间有2到4个任意字符
grep -E 's.?s' grepfile  ##s和s之间有0到1个任意字符
grep -E 's(ks){2,}' grepfile  ##s后面ks字符串最少出现2次

在这里插入图片描述

3、示例

请显示系统中能被su命令切换的用户名称
能被su切换,则必须以/bin/bash/bin/sh结尾

grep -E "/bin/bash$|/bin/sh$" /etc/passwd | cut -d : -f 1

在这里插入图片描述

二、sed

1、sed的格式

sed 参数 命令 处理对象

-e:当给出多个sed指令时使用
-f:后面跟保存了sed指令的文件
-i:直接对内容修改,不加-i时默认为预览,不对文件做实际修改
-n:取消静默输出,sed默认会输出所有文本内容,使用-n后只显示处理过的行

2、对字符的处理

建立实验素材:
在这里插入图片描述p:显示

-n 5p显示第5行
-n 3,5p显示3到5行
-n ”3p;5p“显示3和5行
-ne 1,5p显示1-5行
-ne '5,$p'显示5到最后行
-n '/^#/p'显示以#开头的行
sed -n 5p passwd  ##显示第5行
sed -n '1p;$p' passwd  ##显示第1行和最后一行
sed -n /root/p passwd  ##显示含root的行
sed -ne "3,5p" passwd  ##显示3到5行

在这里插入图片描述d:删除

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

在这里插入图片描述a:添加,c:替换

-e '$a hello world'最后一行后添加
-e '5a hello\nworld'第5行后添加换行的内容
-e '/^#/a hello world'在以#开头的行后面添加
-e '/^#/c hello world'替换以#开头的行
'5chello world'替换第5行

在这里插入图片描述在这里插入图片描述w:把符合的行写到指定文件中,i:插入,r:整合文件

'/^root/w linuxfile'把文件中root开头的行写入linuxfile
'5ihello linux'第5行前插入内容
'5r haha'haha文件的内容整合到第5行之后

在这里插入图片描述

3、字符替换

建立实验素材:
在这里插入图片描述

sed '=' passwd  ##每一行前面加行号
sed '=' passwd | sed 'N;s/\n/ /g'  ##将换行符转换为空格(sed是逐行检测的,加入N提前加载处理下一行)
sed 'G' passwd  ##每行后面都加一个空行
sed '$G' passwd  ##给最后一行后加空行
sed '$!G' passwd  ##除了最后一行在后面都加空行
sed 's/:/#/g' passwd  ##将全文的:替换为#,s全文,g每行的全部
sed 's/:/#/' passwd  ##只替换每行的第一个
sed '1s/:/%%%/g' passwd  ##第一行替换
sed '1,5s/:/%%%/g' passwd ##替换1到5行
sed '1s/:/%%%/g;5s/:/%%%/g' passwd  ##替换第1行和第5行
sed '/mail/,/ftp/s/:/%%%/g' passwd  ##指定字符间替换
sed 's/\//%%%/g' passwd  ##替换全文的"/","\"为转义字符
sed 's@/@%%%@g'  ##也可以使用“@”代替“/”

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

4、示例

编写Apache_port.sh,此脚本后接数字,http的端口就改为此数字,假设selinux为关闭状态
例如:
sh Apache_port.sh
ERROR: Pleaase input port number following script !!
sh Apache_port.sh 8080
apache的端口会被修改为8080,在其他主机可以访问到测试页

vim Apache_port.sh

#!/bin/bash
yum install httpd -y &> /dev/null
systemctl enable --now httpd &> /dev/null
echo "hello linux" > /var/www/html/index.html
systemctl enable --now firewalld &> /dev/null
[ -z $1 ] && {
        echo "ERROR: Pleaase input port number following script !!"
        exit
}
[ -z "`netstat -antlupe | grep -E ":$1\>"`" ] || { 
        echo "Error: $1 is using !!!"
        exit
}
sed "/^Listen/c Listen $1" -i /etc/httpd/conf/httpd.conf
systemctl restart httpd
firewall-cmd --permanent --add-service=http &> /dev/null
firewall-cmd --reload &> /dev/null 
echo "Change $1 sucessful!!"

在这里插入图片描述

三、awk

1、awk的格式

awk -F 分隔符 BEGIN{}{}END{} FILENAME
NR行数
NF列数
FILENAME文件名称本身
linuxlinux变量值
“linux”linux字符串
/bash$/条件
/条件1|条件2/条件1或者条件2
/条件1/||/条件2/条件1或者条件2
/条件1/&&/条件2/条件1并且条件2
$0所有的列
$1第1列
$2第2列
$3第3列

建立实验素材:
在这里插入图片描述1、在passwd文件开始加上hello,结尾加上end,打印第一列

awk -F : 'BEGIN{print "hello"}{print $1}END{print "end"}' passwd

在这里插入图片描述2、统计文件行数,显示以bash结尾的第一列

awk -F : 'BEGIN{N=0}{N++}END{print N}' passwd
awk -F : '/bash$/{print $1}' passwd

在这里插入图片描述3、第六列没有root关键字并且以bash结尾的行,显示第一列

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

在这里插入图片描述

2、示例

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

(1)方法一

awk -F : '$6!~/^\/home/&&/bash$/{print $1}' /etc/passwd | wc -l

在这里插入图片描述(2)方法二

awk -F : 'BEGIN{N=0}$6!~/^\/home/&&/bash$|sh$/{N++}END{print N}' /etc/passwd

在这里插入图片描述

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-11-23 12:46:41  更:2021-11-23 12:47:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 10:26:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计