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

目录
相关文章
|
4天前
|
安全 网络协议 Linux
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。通过掌握 ping 命令,读者可以轻松测试网络连通性、诊断网络问题并提升网络管理能力。
22 3
|
14天前
|
Linux 开发工具
linux文本管理命令
本文档介绍了Linux系统中常用的文本处理命令,包括`echo`、`cat`、`head`、`tail`、`wc`、`less`、`grep`以及重定向符号的使用方法和练习题。此外,还详细讲解了VIM编辑器的特点、工作模式、常用快捷键和高级技巧,帮助用户高效地进行文本编辑和处理。
29 4
|
27天前
|
Linux Perl
Linux awk命令使用技巧
【10月更文挑战第16天】Linux awk命令使用技巧
28 4
|
1月前
|
存储 安全 Linux
Linux文件管理命令md5sum awk
通过结合 `md5sum`和 `awk`,不仅可以高效地进行文件完整性校验,还能灵活地处理和分析校验结果,为系统管理、数据审计等工作提供强大的支持。
55 2
|
1月前
|
Ubuntu Linux
Linux的基础用法
Linux的基础用法
22 6
|
2月前
|
监控 Linux
linux之grep详解
linux之grep详解
|
2月前
|
Linux Perl
Linux之sed命令
Linux之sed命令
|
2月前
|
存储 Linux Shell
linux查找技巧: find grep xargs
linux查找技巧: find grep xargs
38 13
|
2月前
|
Linux Shell
10-10|linux命令查询 关键字在文本中出现的行数
10-10|linux命令查询 关键字在文本中出现的行数
|
2月前
|
人工智能 监控 Shell
常用的 55 个 Linux Shell 脚本(包括基础案例、文件操作、实用工具、图形化、sed、gawk)
这篇文章提供了55个常用的Linux Shell脚本实例,涵盖基础案例、文件操作、实用工具、图形化界面及sed、gawk的使用。
449 2

热门文章

最新文章