linux文本处理工具——grep、sed、awk用法

简介: linux文本处理工具——grep、sed、awk用法

linux文本处理工具
1.grep
1.字符的过滤grep
2.grep的基础搜索文本指令
3.grep命令字符数量匹配规则
2.sed 字符替换
p 显示
d 删除
a 添加
c 替换
w 写入(将符合条件的行写入指定文件中)
i 插入
r 整合(整合文件内容到指定行)
s 替换关键字
3.awk
awkd的用法
练习:
1.grep
1.字符的过滤grep
grep命令是linux下的文本处理工具,这些命令都是用于对一个文件和文本执行重复搜索的工具。我们可以通过grep命令指定特定的搜索条件来搜索文件及其内容以获取有用的信息。 grep时全局搜索,其抓取数据是贪婪模式,即不会漏掉过滤内容,但准确性也会降低

2.grep的基础搜索文本指令
egrep = grep -E
grep -e ”root|nologin“ passwd 搜索含有root和nllogin的行 = grep -e root -e nologin passwd (同时过滤两个目标)
grep -i root passwd 忽略大小写
grep -E “” passwd 搜索字符不能有后缀
grep -E “” passwd 搜索字符前后都不能有后缀
grep -n westos passwd 显示匹配的行所在行号
grep -5 westos passwd 显示过滤行及前后5行将会显示
grep -B5 westos passwd 显示含有关键字的行及以上5行
grep -A5 westos passwd 显示含有关键字的行及以下5行
grep -v root passwd 显示不含有root的过滤行(反选)

3.grep命令字符数量匹配规则
grep ^westos westos 以westos开头
grep westos$ westos 以westos结尾
grep w.s westos ws之间有任意一个字符的
grep w…s westos ws之间有任意三个字符的
grep -E “w.*s“ westos 表示字符出现了任意次
grep -E "was" westos a出现了任意次
grep -E “wa{2}s” westos a出现了两次
grep -E “wa?s” westos a出现了0-1次
grep -E ‘w.+s’ westos 含有任意字符出现一次以上
grep -E ‘w.{3,}s’ westos 含有最少三个任意字符
grep -E ‘w.{,3}s’ westos 最多三个
grep -E ‘w.{1,3}s’ westos 1-3个
grep -E ‘w(ab){3,}s’ westos 含有字符串最少3个的所在行

练习:
使用脚本把主机中可以su切换的用户过滤出来

!/bin/bash

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

1
2
3
2.sed 字符替换
不输出模式空间的内容,只输出处理过的内容

p 显示
sed -n 5p passwd 显示第五行内容
cat -b passwd | sed -n 3,5p 显示3-5行
cat -b passwd | sed -n ‘3p;5p’ 显示3行和5行 (-b 显示输出行号)
cat -b passwd | sed -n ‘/^root/p’ 显示root开头的行
sed -n ‘bash/ p ′ p a s s w d 显 示 以 b a s h 结 尾 的 行 s e d − n ′ 5 , /p' passwd 显示以bash结尾的行 sed -n '5,/p

passwd显示以bash结尾的行sed−n

5,p’ passwd 显示第5行到最后一行
sed -n ‘$p’ passwd 显示最后一行

d 删除
cat -b passwd | sed ‘5,8d’ 删除5-8行
cat -b passwd | sed -e ‘5d;8d’ 删除5和8行
sed -e ‘/^root/d’ passwd 删除以root开头的行
sed -e ‘/bash$/d’ passwd 删除bash结尾的行

a 添加
sed ‘2aleeleelee’ westos 在第2行之后添加leeleelee
sed ‘hello/aleeleelee’ westos 在hello后加leeleelee
sed ‘$aleeleelee’ westos 在最后一行后面加leeleelee

c 替换
sed ‘1chahaha’ westos 第一行替换为hahaha
sed ‘/linux/chahaha’ westos 将linux替换为hahaha

w 写入(将符合条件的行写入指定文件中)
sed ‘/nologin$/wwestosfile’ passwd 将passwd中以nologin结尾的行全部写入到westosfile中

i 插入
r 整合(整合文件内容到指定行)
sed ‘2rlee’ westos 将lee整合到westos中的第二行之后
sed ‘hello/rlee’ westos 将lee文件内容整合到westos中hello行之后

s 替换关键字
(g表示所有关键字的列,如果不加g则默认替换每行出现的第一列)

sed ‘s/a/b/g’ test 将test中的a全部替换成b
sed ‘s/sbin/westos/g’ passwd 将sbin替换为westos
sed ‘4,5s/sbin/westos/g’ passwd 4-5行的sbin替换成westos
sed ‘$s/sbin/westos/g’ passwd 最后一行
sed ‘s///###/g’ passwd 将全文的/替换为#,\是转译/不是命令而是单纯的字符 或者可以将/写成@ 即 sed ‘s@/@###@g’ passwd
保存:
sed ‘s@/@###@g’ -i passwd 将sed处理的内容保存在原文件中

练习:
编写一个脚本,使得其可以输入一个端口,http的端口就改为这个数字
思路:
1.先确保运行脚本时输入了数字,不能为空
2.确认主机下载了该服务
3.确认服务已经启动
4.改变http配置文件的端口,并重启
5.显示http服务改变后的端口

!/bin/bash

setenforce 0 &> /dev/null

[ -z "$1" ] && {
echo "Errow:Please input port following script !!"
exit
}

rpm -q httpd &> /dev/null || {
echo "Errow:Apache is not installed !!"
exit
}

systemctl status httpd | grep "running" &> /dev/null || {
echo "Eroow:Apache is not running !!"
exit
}

netstat -antlupe | grep -E ":$1>" &> /dev/null && {
echo "Errow: $1 is in used !! "
exit
}

sed "/^Listen/cListen $1" -i /etc/httpd/conf/httpd.conf
systemctl restart httpd

netstat -antlupe | grep http
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
3.awk
awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。

$0 表示显示所有列
$1 只显示第一列
$2 只显示第二列

awkd的用法
(1) 使用awk命令,首先输出显示westos,接着-F指定以:为分隔符截取显示passwd文件的第一列,最后输出显示end

BEGIN:运行处理策略之前的动作 print $1: 处理动作 END:处理结束所作事情

注意: ‘ ’引起来的截取策略中的字符串需要用“ ”引起来,否则awk命令会将其当作变量处理(即不会输出显示指定字符串本身)

awk -F : BEGIN’{print “name”}{print $1}END{print “end”}’ westos

(2)使用awk命令统计passwd文件行数:给变量N赋初值为0,awk每读取一行文件内容变量N就进行一次自加操作,最后输出变量N的值即为passwd文件的行数
awk -F : ‘BEGIN{westos=0}{westos++}END{print westos}’ westos

(3)
awk -F : ‘{print NF}’ westos NF表示统计列数
awk -F : ‘{print NR}’ westos NR表示统计行数

awk -F : ‘/nologin$/{print $1,$7}’ westos 显示以nologin结尾的行

awk -F : ‘/nologin$|^root/{print $1,$7}’ westos 条件中两个元素是或的关系,以nologin结尾或root开头

awk -F : ‘/bash$/&&/^root/{print $1,$7}’ westos 两个条件是且的关系,同时符合bash结尾以root开头

awk -F : '$7~/bash$/{print $0}' westos

显示第7列是以bash结尾的结果(结果显示所有列)

awk -F : '$7!~/bash$/{print $0}' westos

第7列不是以bash结尾的

awk -F : '{print FILENAME}' westos #FILENAME:要处理的文件名称
1
2
3
4
5

练习:
用awk指令找出主机中可以登陆且家目录不在/home下的用户数量

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

用awk指令一次抓取出ifconfig中的ip

ifconfig ens3 | awk '/\/{print $2}'
1

文章知识点与官方知识档案匹配,可进一步学习相关知识
CS入门技能树Linux实用命令sed命令34993 人正在系统学习中
————————————————
版权声明:本文为CSDN博主「已认证运维工程师」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_60200126/article/details/119683458

目录
相关文章
|
19天前
|
监控 Unix Linux
Linux操作系统调优相关工具(四)查看Network运行状态 和系统整体运行状态
Linux操作系统调优相关工具(四)查看Network运行状态 和系统整体运行状态
32 0
|
20天前
|
Linux Perl
Linux|从 STDIN 读取 Awk 输入
Linux|从 STDIN 读取 Awk 输入
20 4
|
19天前
|
Linux
Linux操作系统调优相关工具(三)查看IO运行状态相关工具 查看哪个磁盘或分区最繁忙?
Linux操作系统调优相关工具(三)查看IO运行状态相关工具 查看哪个磁盘或分区最繁忙?
22 0
|
3天前
|
存储 Linux Shell
Linux|Awk 变量、数字表达式和赋值运算符
Linux|Awk 变量、数字表达式和赋值运算符
11 2
|
4天前
|
JSON Unix Linux
Linux系统之jq工具的基本使用
Linux系统之jq工具的基本使用
32 2
|
5天前
|
监控 安全 Linux
Linux系统之安装ServerBee服务器监控工具
【4月更文挑战第22天】Linux系统之安装ServerBee服务器监控工具
43 2
|
5天前
|
编解码 Linux 数据安全/隐私保护
linux工具之curl与wget高级使用
linux工具之curl与wget高级使用
|
15天前
|
Linux
Linux 指令|date|cal|find|grep|热键
Linux 指令|date|cal|find|grep|热键
|
24天前
|
Linux Perl
Linux| Awk 中“next”命令奇用
Linux| Awk 中“next”命令奇用
27 9
|
24天前
|
资源调度 JavaScript 安全
Linux系统之部署web-check网站分析工具
【4月更文挑战第3天】Linux系统之部署web-check网站分析工具
70 9

热门文章

最新文章