小壮学运维32--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匹配xy中间有两个字符的内容

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

猜你喜欢

转载自blog.csdn.net/hello_xiaozhuang/article/details/80779480