linux中shell的文本处理

shell中的文本处理

1、grep--文本过滤命令

全面搜索研究正则表达式并显示出来;

grep命令是一种强大的文本搜索工具,根据用户指定的“模式”对目标文本进行匹配检查,打印匹配到的行;

由正则表达式或者字符及基本文件字符所编写的过滤条件

1)grep  root  passwd 

grep 匹配条件 处理文件

-i 表示不区分匹配条件的大小写

-ni 表示不区分匹配条件的大小写并且显示行数

2)grep -n关键字 表示并显示含有关键字的行数

grep -n2 关键字 显示关键字的行数和上下两行

linux中shell的文本处理

3)grep -A3 关键字 显示关键字下面三行 After

 

grep -B3 关键字 显示关键字上面三行 Before

linux中shell的文本处理

4)grep ^关键字 显示关键字在开头的的内容

grep 关键字$ 显示关键字在末尾的内容

linux中shell的文本处理

5)grep 关键字 文本 -v 显示除了关键字的其他内容

linux中shell的文本处理

6)egrep=grep -E

扩展正则表达式 grep  -E "bin|lp" passwd

 

显示passwd文本里含有bin或者lp的内容,这里|也有通道符的意思,所以属于扩展正则表达式,要用grep -E或 egrep 

linux中shell的文本处理

 

7)显示root在中间的内容,这里用两条命令结合实现

 

linux中shell的文本处理

8)grep \<关键字 前面有堵墙 前面什么都不能有

grep 关键字\>  后面有堵墙 
grep \<关键字\> 前后都只能是这个关键字
测试:从ifconfig eth0里取出ip

linux中shell的文本处理

9)grep  x..y匹配x和y中间有两个字符的内容

 

grep  x....y
grep  ....y

 

10)grep字符匹配次数的设定

-o 唯一匹配

linux中shell的文本处理

 

2、sed--行编辑器 stream editor

用来操作出ASCLL码的文本;

处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(Pattern space)可以指定仅仅处理哪些行为;

符合模式条件的处理,不符合模式条件的不予处理,处理完成之后八缓冲区的内容送往屏幕,接着处理下一行,这样不断重复,直到文件末尾。

1)在p--显示模式下操作

*)sed   -n '/UUID/p'  fstab 显示文本中关键字的信息

linux中shell的文本处理

*)显示文本中给出的行数信息(2到5行 and 除了2到5行)

linux中shell的文本处理

*)测试:

1、建立一个shell 名称为create_user.sh可以执行创建文件里指定用户

linux中shell的文本处理

2、建立一个shell create_user.sh可以执行创建用户并给密码

 

ehco 123 | passwd --stdin user1非交互式(不弹出对话框)加密

linux中shell的文本处理

 

2)d--删除模式下的操作

1、删除文本空白行

linux中shell的文本处理

2、删除关键字行

linux中shell的文本处理

3)a--添加模式下的操作

a 添加但不保存(\n表示换行),-i保存但是不显示

linux中shell的文本处理

linux中shell的文本处理

4)c--替换模式下的操作

linux中shell的文本处理

测试题目:apache服务的端口更改

linux中shell的文本处理

5)w--写入模式下的操作

1、sed '/UUID/w westos'  fstab

将fstab文本中UUID的内容写入westos

linux中shell的文本处理

2、sed '6r westos' fstaba

将westos的内容写入fstab第六行

linux中shell的文本处理

6)sed 其他用法

1、sed 's/sbin/123123/g' passwd

将passwd文本里的sbin替换成123123

linux中shell的文本处理

2、-e 可以指定多个条件

linux中shell的文本处理

3、将/替换成空白

linux中shell的文本处理

4、显示满足条件的关键字在第几行 “=”

linux中shell的文本处理

5、-f rule指定规则;可以在rule里写入多条规则,-f执行

linux中shell的文本处理

6、’G‘  起到加空行的作用

linux中shell的文本处理

7、$!G除了最后一行不加空行,其他都加

linux中shell的文本处理

8、‘=’ 加行数

linux中shell的文本处理

9、在上面的条件下去除空行,在前面添加行数

linux中shell的文本处理

综合测试grep和sed:

 

grep ich /usr/share/mime/packages/freedesktop.org.xml| sed 's/^ *//g'将文件里含有ich的把全部空格删除掉

linux中shell的文本处理

 

3、awk--报告生成器

awk处理机制:awk会逐行处理文本,支持在处理的第一行之前做一些准备工作,以及在处理完的最后一行做一些总结性质的工作。

在命令格式下分别体现为:

BEGIN{}:读入第一行文本之前执行,一般用来初始化操作;

{}:逐行处理,逐行读入文本执行相应的处理,最常见的时编辑指令快;

END{}:处理完最后一行文本之后执行,一般用来输出处理结果。

 

awk
-F 指定分隔符
{print $1}输出第一列的内容
BEGIN{}起始条件
END{}结束条件

1) NR多少行

linux中shell的文本处理

2)NF多少列

linux中shell的文本处理

3)列出shell时base的用户并显示有多少个

linux中shell的文本处理

4)awk -F : $!6~/条件/{printf }  输出以冒号为分隔符第六列是除了什么条件的

linux中shell的文本处理

5)在上面的条件下,&&满足两个条件

linux中shell的文本处理

6)用awk抓取eth0的网卡ip

linux中shell的文本处理