linux中shell的文本处理
shell中的文本处理
1、grep--文本过滤命令
全面搜索研究正则表达式并显示出来;
grep命令是一种强大的文本搜索工具,根据用户指定的“模式”对目标文本进行匹配检查,打印匹配到的行;
由正则表达式或者字符及基本文件字符所编写的过滤条件
1)grep root passwd
grep 匹配条件 处理文件
-i 表示不区分匹配条件的大小写
-ni 表示不区分匹配条件的大小写并且显示行数
2)grep -n关键字 表示并显示含有关键字的行数
grep -n2 关键字 显示关键字的行数和上下两行
3)grep -A3 关键字 显示关键字下面三行 After
grep -B3 关键字 显示关键字上面三行 Before
4)grep ^关键字 显示关键字在开头的的内容
grep 关键字$ 显示关键字在末尾的内容
5)grep 关键字 文本 -v 显示除了关键字的其他内容
6)egrep=grep -E
扩展正则表达式 grep -E "bin|lp" passwd
显示passwd文本里含有bin或者lp的内容,这里|也有通道符的意思,所以属于扩展正则表达式,要用grep -E或 egrep
7)显示root在中间的内容,这里用两条命令结合实现
8)grep \<关键字 前面有堵墙 前面什么都不能有
grep 关键字\> 后面有堵墙
grep \<关键字\> 前后都只能是这个关键字
测试:从ifconfig eth0里取出ip
9)grep x..y匹配x和y中间有两个字符的内容
grep x....y
grep ....y
10)grep字符匹配次数的设定
-o 唯一匹配
2、sed--行编辑器 stream editor
用来操作出ASCLL码的文本;
处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(Pattern space)可以指定仅仅处理哪些行为;
符合模式条件的处理,不符合模式条件的不予处理,处理完成之后八缓冲区的内容送往屏幕,接着处理下一行,这样不断重复,直到文件末尾。
1)在p--显示模式下操作
*)sed -n '/UUID/p' fstab 显示文本中关键字的信息
*)显示文本中给出的行数信息(2到5行 and 除了2到5行)
*)测试:
1、建立一个shell 名称为create_user.sh可以执行创建文件里指定用户
2、建立一个shell create_user.sh可以执行创建用户并给密码
ehco 123 | passwd --stdin user1非交互式(不弹出对话框)加密
2)d--删除模式下的操作
1、删除文本空白行
2、删除关键字行
3)a--添加模式下的操作
a 添加但不保存(\n表示换行),-i保存但是不显示
4)c--替换模式下的操作
测试题目:apache服务的端口更改
5)w--写入模式下的操作
1、sed '/UUID/w westos' fstab
将fstab文本中UUID的内容写入westos
2、sed '6r westos' fstaba
将westos的内容写入fstab第六行
6)sed 其他用法
1、sed 's/sbin/123123/g' passwd
将passwd文本里的sbin替换成123123
2、-e 可以指定多个条件
3、将/替换成空白
4、显示满足条件的关键字在第几行 “=”
5、-f rule指定规则;可以在rule里写入多条规则,-f执行
6、’G‘ 起到加空行的作用
7、$!G除了最后一行不加空行,其他都加
8、‘=’ 加行数
9、在上面的条件下去除空行,在前面添加行数
综合测试grep和sed:
grep ich /usr/share/mime/packages/freedesktop.org.xml| sed 's/^ *//g'将文件里含有ich的把全部空格删除掉
3、awk--报告生成器
awk处理机制:awk会逐行处理文本,支持在处理的第一行之前做一些准备工作,以及在处理完的最后一行做一些总结性质的工作。
在命令格式下分别体现为:
BEGIN{}:读入第一行文本之前执行,一般用来初始化操作;
{}:逐行处理,逐行读入文本执行相应的处理,最常见的时编辑指令快;
END{}:处理完最后一行文本之后执行,一般用来输出处理结果。
awk
-F 指定分隔符
{print $1}输出第一列的内容
BEGIN{}起始条件
END{}结束条件
1) NR多少行
2)NF多少列
3)列出shell时base的用户并显示有多少个
4)awk -F : $!6~/条件/{printf } 输出以冒号为分隔符第六列是除了什么条件的
5)在上面的条件下,&&满足两个条件
6)用awk抓取eth0的网卡ip