Linux--文本三剑客
1、grep
1.1 什么是grep和egrep
Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来(匹配到的标红)。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。
grep的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到标准输出,不影响原文件内容。
grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作。
1.2 命令参数
常用参数已加粗
-A<显示行数>:除了显示符合范本样式的那一列之外,并显示该行之后的内容。
-B<显示行数>:除了显示符合样式的那一行之外,并显示该行之前的内容。
-C<显示行数>:除了显示符合样式的那一行之外,并显示该行之前后的内容。
-c:统计匹配的行数
-e :实现多个选项间的逻辑or 关系
-E:扩展的正则表达式
-f FILE:从FILE获取PATTERN匹配
-F :相当于fgrep
-i --ignore-case #忽略字符大小写的差别。
-n:显示匹配的行号
-o:仅显示匹配到的字符串
-q: 静默模式,不输出任何信息
-s:不显示错误信息。
-v:显示不被pattern 匹配到的行,相当于[^] 反向匹配
-w :匹配 整个单词
1.3演练:
[root@CBDD test]# cat nano
AAAAAA
BBBBBB
CCCCCC
DDDDDD
aaaaaa
bbbbbb
cccccc[root@CBDD test]# grep -A2 B nano
BBBBBB
CCCCCC
DDDDDD
[root@CBDD test]# grep -B2 B nano
AAAAAA
BBBBBB
[root@CBDD test]# grep -C1 B nano
AAAAAA
BBBBBB
CCCCCC
[root@CBDD test]# grep -c B nano
1
[root@CBDD test]# grep -c A nano
1
[root@CBDD test]# grep -e AAA -e bbb nano
AAAAAA
bbbbbb
[root@CBDD test]# grep -in a nano
1:AAAAAA
5:aaaaaa
[root@CBDD test]# grep -o AA nano
AA
AA
AA
[root@CBDD test]# grep -v c nano
AAAAAA
BBBBBB
CCCCCC
DDDDDD
aaaaaa
bbbbbb[root@CBDD test]# grep -w a nano
[root@CBDD test]# grep -w AAAAAA nano
AAAAAA
[root@CBDD test]#
3、认识sed
sed 是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(patternspace ),接着用sed 命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。然后读入下行,执行下一个循环。如果没有使诸如‘D’ 的特殊命令,那会在两个循环之间清空模式空间,但不会清空保留空间。这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出或-i。
功能:主要用来自动编辑一个或多个文件, 简化对文件的反复操作
2.1、常用选项options
-n:不输出模式空间内容到屏幕,即不自动打印,只打印匹配到的行
-e:多点编辑,对每行处理时,可以有多个Script
-f:把Script写到文件当中,在执行sed时-f 指定文件路径,如果是多个Script,换行写
-r:支持扩展的正则表达式
-i:直接将处理的结果写入文件
-i.bak:在将处理的结果写入文件之前备份一份
2.2、编辑命令command
d:删除模式空间匹配的行,并立即启用下一轮循环
p:打印当前模式空间内容,追加到默认输出之后
a:在指定行后面追加文本,支持使用\n实现多行追加
i:在行前面插入文本,支持使用\n实现多行追加
c:替换行为单行或多行文本,支持使用\n实现多行追加
w:保存模式匹配的行至指定文件
r:读取指定文件的文本至模式空间中匹配到的行后
=:为模式空间中的行打印行号
!:模式空间中匹配行取反处理
在替换时,可以加一下命令,实现大小写转换
\l:把下个字符转换成小写。
\L:把replacement字母转换成小写,直到\U或\E出现。
\u:把下个字符转换成大写。
\U:把replacement字母转换成大写,直到\L或\E出现。
\E:停止以\L或\U开始的大小写转换
2.2、sed用法演示
[root@CBDD test]# sed "/AAA/p" nano
AAAAAA //打印匹配到的和没匹配到的
AAAAAA
BBBBBB
CCCCCC
DDDDDD
aaaaaa
bbbbbb
cccccc[root@CBDD test]# sed -n "/aaa/p" nano // 只打印匹配到的
aaaaaa
[root@CBDD test]# sed -e "s/a/A/" -e "s/b/B/" nano
AAAAAA
BBBBBB
CCCCCC
DDDDDD // 实现多点编辑,将第一个匹配到的a和b 替换成A B
Aaaaaa
Bbbbbb
cccccc[root@CBDD test]# cat nano
AAAAAA
BBBBBB
CCCCCC
DDDDDD
aaaaaa
bbbbbb
cccccc[root@CBDD test]# sed -e "s/a/A/g" -e "s/b/B/g" nano
AAAAAA
BBBBBB
CCCCCC
DDDDDD
AAAAAA
BBBBBB
cccccc[root@CBDD test]# sed -i.bak "s/a/A/g" nano
[root@CBDD test]# cat nano
AAAAAA
BBBBBB
CCCCCC //-i 执行 .bak 生成bak备份文件
DDDDDD
AAAAAA
bbbbbb
cccccc[root@CBDD test]# cat nano.bak
AAAAAA
BBBBBB
CCCCCC
DDDDDD
aaaaaa
bbbbbb
cccccc
2.3、编辑命令command演示
[root@CBDD test]# sed "2d" nano
AAAAAA // 删除第二行
CCCCCC
DDDDDD
AAAAAA
bbbbbb
cccccc[root@CBDD test]# sed -n "2p" nano // 只打印第二行
BBBBBB
[root@CBDD test]# sed "2a666" nano // 在第二行后面追加666
AAAAAA
BBBBBB
666
CCCCCC
DDDDDD
AAAAAA
bbbbbb
cccccc[root@CBDD test]# sed "2i666" nano // 在第二行前边插入666
AAAAAA
666
BBBBBB
CCCCCC
DDDDDD
AAAAAA
bbbbbb
cccccc[root@CBDD test]# sed -n "=" nano
1 // 显示行号
2
3
4
5
6
7
8[root@CBDD test]# sed 's@[a-z]@\u&@g' nano // 将所有小写字母替换成大写
AAAAAA
BBBBBB
CCCCCC
DDDDDD
AAAAAA
BBBBBB
CCCCCC
2.4 sed高级编辑命令
1)格式
h:把模式空间中的内容覆盖至保持空间中
H:把模式空间中的内容追加至保持空间中
g:从保持空间取出数据覆盖至模式空间
G:从保持空间取出内容追加至模式空间
x:把模式空间中的内容与保持空间中的内容进行互换
n:读取匹配到的行的下一行覆盖 至模式空间
N:读取匹配到的行的下一行追加 至模式空间
d:删除模式空间中的行
D:删除 当前模式空间开端至\n 的内容(不再传 至标准输出),放弃之后的命令,但是对剩余模式空间重新执行sed
演示:使用sed 进行逆序
[root@CBDD test]# seq 10 | sed '1!G;h;$!d'
10
9
8
7
6
5
4
3
2
1
使用sed显示偶数行
[root@CBDD test]# seq 5 | sed -n 'n;P'
2
4
使用sed显示奇数行
[root@CBDD test]# seq 5 | sed 'H;n;d'
1
3
5
3、awk
awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入(stdin)、一个或多个文件,或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。awk有很多内建的功能,比如数组、函数等,这是它和C语言的相同之处,灵活性是awk最大的优势。
awk其实不仅仅是工具软件,还是一种编程语言。不过,本文只介绍它的命令行用法,对于大多数场合,应该足够用了。
常用命令选项
-F fs:fs指定输入分隔符,fs可以是字符串或正则表达式,如-F:
-v var=value:赋值一个用户定义变量,将外部变量传递给awk
-f scripfile:从脚本文件中读取awk命令
内置变量
(1)格式
FS :输入字段分隔符,默认为空白字符
OFS :输出字段分隔符,默认为空白字符
RS :输入记录分隔符,指定输入时的换行符,原换行符仍有效
ORS :输出记录分隔符,输出时用指定符号代替换行符
NF :字段数量,共有多少字段, $NF引用最后一列,$(NF-1)引用倒数第2列
NR :行号,后可跟多个文件,第二个文件行号继续从第一个文件最后行号开始
FNR :各文件分别计数, 行号,后跟一个文件和NR一样,跟多个文件,第二个文件行号从1开始
FILENAME :当前文件名
ARGC :命令行参数的个数
ARGV :数组,保存的是命令行所给定的各参数,查看参数
[root@CBDD test]# awk -v FS=':' '{print $1,$2}' ppp
hello world // 使用:为分隔符 打印 第一第二变量
12 34
a b[root@CBDD test]# awk -v FS=':' '{print $1}' ppp
hello
12 // 只打印第一个
a[root@CBDD test]# awk -v FS=':' -v OFS='+++' '{print $1,$2}' ppp
hello+++world
12+++34 // 输出分隔符为+++
a+++b
[root@CBDD test]# awk -F: '{print $(NF-1)}' ppp
hello
12 //打印倒数第二个
B[root@CBDD test]# awk '{print NR}' ppp
1 // 打印行号
2
3
使用定时脚本阻止扫描器扫描
脚本:
logfile=/var/log/httpd/
last_minutes=1
start_time=`date -d"$last_minutes minutes ago" +"%d/%m/%Y:%H:%M:%S"
echo $start_time
stop_time=`date +"%d/%m/%Y:%H:%M:%S"
echo $stop_time
cur_date="date +%d/%m/%Y" //设置时间
echo $cur_date
tac $logfile/access.log | awk -v st="$start_time" -v et="$stop_time" '{t=substr($4,2);if(t>=st && t<=et){print $1}}' |sort | uniq -c | sort -nr > $logfile/log_ip_top10 //得到前十ip
ip=`cat $logfile/log_ip_top10 | awk '{if($1 > 100)print $2}'`
for line in $ip
do
echo $line >> $logfile/getip.txt
echo $line
iptables -I INPUT -p tcp -m multiport --dport 80,443 -s $line -j DROP // 封掉ip
done
加入任务计划
Linux--文本三剑客相关推荐
- linux 匹配文本中的ip,linux文本三剑客匹配网卡IP地址大PK(CentOS 7系统)
运维工程师在做配置的过程中很多时候都需要去获取目标服务器网卡上的IP地址,那究竟用什么方式获取更便捷了,博主今天就带大家使用linux文本三剑客分别获取一下网卡的IP地址,最后我们再来对比一下. 实验 ...
- Linux文本三剑客--grep、sed、awk
Linux文本三剑客–grep.sed.awk 文章目录 Linux文本三剑客--grep.sed.awk 1.grep 1.1什么是grep 1.2使用grep 命令格式 命令参数 基本正则表表达式 ...
- linux文本三剑客演讲稿,linux文本三剑客之grep
grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正 ...
- Linux文本三剑客(grep、sed、awk)
目录 grep 1.什么是grep和rgrep? 2.使用grep 2.1.命令格式 2.2.命令功能 2.3.命令参数 3.实战演示 sed 1.认识sed 2.使用sed 2.1.命令格式 2.2 ...
- Linux文本三剑客
Linux下文本三剑客 正则表达式 文本三剑客Grep 文本三剑客Sed 文本三剑客Awk awk.grep.sed是linux操作文本的三大利器,合称文本三剑客,也是必须掌握的linux命令之一.三 ...
- linux文本三剑客,Linux文本处理三剑客之grep
Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配到的行打印出来. grep的全称是:Global Search Regular Expression and ...
- linux sed后 保存文本,实例详解linux文本三剑客--sed
sed 简介 sed是一种流编辑器,以行为单位进行文本处理,可以将数据行进行替换.删除.新增.选取等操作. sed [options] 'command' file(s) 基本命令 匹配内容 $ se ...
- Linux文本三剑客之一——awk详解(1)——awk看这两篇就够啦~PS:文末有练习,来练练手吧
shell编程三剑客 grep --> egrep --> 文本过滤 查询 awk 文本截取 sed 文本的替换和修改 目录 awk awk也可以做小数运算 awk命令简要处理流程 aw ...
- Linux 文本三剑客—grep命令
文章目录 grep 常用选项 简单练习 正则表达式 网址查找 IP地址查找 邮箱地址查找 练习1 练习2 grep grep 通用正则表达式分析程序(global search regular exp ...
- Linux文本三剑客之sed
sed命令详解 一.简介 二.工作原理 三.用法 1.地址定界 2.编辑命令 四.实例及详解 一.简介 sed是一种新型的,非交互式的流式(从上往下读取一行处理一行)的编辑器 可以执行vi和ex相同的 ...
最新文章
- android课程设计录音机,[转载]数字录音机(微机原理与接口技术-课程设计)
- Sql Server中Select @Value和Select Value的区别
- google浏览器javascript没反应_浏览器之导航这件小事
- 获取 iPhone 上联系人姓名、电话、邮件的代码
- 使用JGroups进行ElasticMQ消息复制
- Hello Blog!
- C语言课后习题(12)
- css表格排序,纯CSS实现表格排序-利用CSS 变量和Flexbox
- 微软删除了人脸识别库,除了因为隐私,更重要的恐怕是因为性别歧视和种族主义...
- Hibernate插入、查询、删除操作 HQL (转)
- Spring properties dependency checking
- iOS7以上: 实现如“日历”的 NavigationBar
- sql server2016导入excel错误
- 3DMax 完全重置
- SPSS中有关相关性分析的介绍(双变量相关分析、偏相关)
- ActivityManager解析及使用
- nginx配置在线播放mp4格式视频
- 提高计算机启动速度的是什么,三种方法让你实现电脑秒开!提升电脑开机速度就是这么简单!...
- 科目三考试挂掉原因分析
- win10防火墙推荐设置来保护计算机,大神详解win10隐藏防火墙和网络保护部分方法的完全解决要领...
热门文章
- thinkpad触控笔怎么用_新iPhone将支持触控笔?乔布斯当年是这样疯狂diss的
- 计算机哪一部分学的是网站管理,1,管理信息系统是一门新型学科,它属于A,计算机学(20页)-原创力文档...
- 【GlobalMapper精品教程】055:GM坐标转换器的巧妙使用
- python 爬动态壁纸
- 转自CSDN----双色球随机摇号
- 5G物联网组网架构-网络
- Linux设置和查看环境变量的方法
- 物联网在智能交通中的应用前景
- 信号归一化功率_[振动与测试 3] 自功率谱Autopower及幅值显示形式
- 嵌入式linux驱动工程师面试,嵌入式Linux驱动工程师/BSP开发工程师面试笔试题集锦...