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

目录
相关文章
|
1月前
|
Linux 网络安全 数据安全/隐私保护
Linux 超级强大的十六进制 dump 工具:XXD 命令,我教你应该如何使用!
在 Linux 系统中,xxd 命令是一个强大的十六进制 dump 工具,可以将文件或数据以十六进制和 ASCII 字符形式显示,帮助用户深入了解和分析数据。本文详细介绍了 xxd 命令的基本用法、高级功能及实际应用案例,包括查看文件内容、指定输出格式、写入文件、数据比较、数据提取、数据转换和数据加密解密等。通过掌握这些技巧,用户可以更高效地处理各种数据问题。
107 8
|
2月前
|
监控 Java Linux
Linux系统之安装Ward服务器监控工具
【10月更文挑战第17天】Linux系统之安装Ward服务器监控工具
68 5
Linux系统之安装Ward服务器监控工具
|
1月前
|
Linux 开发工具
linux文本管理命令
本文档介绍了Linux系统中常用的文本处理命令,包括`echo`、`cat`、`head`、`tail`、`wc`、`less`、`grep`以及重定向符号的使用方法和练习题。此外,还详细讲解了VIM编辑器的特点、工作模式、常用快捷键和高级技巧,帮助用户高效地进行文本编辑和处理。
49 4
|
1月前
|
缓存 监控 Linux
Linux性能分析利器:全面掌握perf工具
【10月更文挑战第18天】 在Linux系统中,性能分析是确保软件运行效率的关键步骤。`perf`工具,作为Linux内核自带的性能分析工具,为开发者提供了强大的性能监控和分析能力。本文将全面介绍`perf`工具的使用,帮助你成为性能优化的高手。
156 1
|
1月前
|
缓存 监控 Linux
掌握Linux性能分析:深入探索perf工具
【10月更文挑战第26天】
69 1
|
Shell Linux
Linux中常用的文本处理命令(echo、sort、uniq、tr、cut、split、eval)(上)
1、echo命令——输出 echo 命令主要用来显示字符串信息。
379 0
|
机器学习/深度学习 Linux Shell
Linux 基础-文本处理命令
Linux 基础-文本处理命令
189 0
|
Linux Shell
Linux中常用的文本处理命令(echo、sort、uniq、tr、cut、split、eval)(下)
1、echo命令——输出 echo 命令主要用来显示字符串信息。
257 0
|
Linux 开发工具 Perl
Linux学习笔记五:Linux 文本处理相关命令
大家好,昨天我们学习了Linux的Vim 编辑器等相关知识。今天学习下Linux的文本处理相关知识点。
103 0
|
存储 Linux vr&ar
Linux文本处理三剑客sed详解(正则匹配、命令示例)
sed读一行放到模式空间进行处理 sed是一种在线的、非交互式的编辑器,它一次处理一行内容,处理时,把当前处理的行存储在临时缓冲区中,成为模式空间,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾,文件内容并没有更改,除非使用重定向存储输出。 sed主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序
224 0

热门文章

最新文章