RHCE_RHEL6_255 U3.2 BASH文件处理工具
RHEL默认的shell是bash。Shell可直接输入命令,进行人机交互,也可以从特殊文件中读取命令—shell脚本。本节我们先要学习shell文本处理工具。
一、常用的文本处理:
1.cat 、less、 more、nl。都是用来显示文件的内容的。
命令 |
说 明: |
cat |
一次性输出。通常:交给后面的管道,或重定向 |
less |
分页。“/”查找搜索 向上下翻页。“v”就可进入vi编辑 |
more |
分页。不能向上翻页 |
nl |
自动加行号 |
2.head:显示文件的前几行 。默认10行。tail:显示文件的最后几行。默认10行。 系统管理员可以使用“tail -f”监视系统日志。如何显示11-20行?
3.grep:过滤行。常用选项:
选项 |
说 明: |
-i |
不区分大小写搜索 |
-n |
返回包含行号 |
-v |
返回不包含模式的行 |
-Ax |
匹配关键字的后x行 如:# grep -A 5 ftp /etc/passwd |
-Bx |
匹配关键字的前x行 |
-r |
递归式搜索,从当前目录开始 |
-c |
匹配行的统计 |
–color |
–color=auto 如:# date –help |grep –color year |
-l |
列出至少有一行包含模式的文件的名称 |
^abc |
以abc 开头的行 |
abc$ |
以abc 结尾的行 |
[[:upper:]] |
指定一定是::root:如:grep –color :root: passwd |
4.cut:用于“剪切”文件中的列。
选项 |
说 明: |
-d |
指定分隔符(Tab是默认值)-d” 内有2个空格last |
-f |
指定列 |
-c |
指定字符 |
5.tee:从标准输入设备读取数据,将其内容输出到标准输出设备,同时输出保存成文件。语法:tee [-ai][–help][–version][文件…]
-a或–append 附加到既有文件的后面,而非覆盖它。
–help 在线帮助。
–version 显示版本信息。
6.tr:用来从标准输入中通过替换或删除操作进行字符转换。使用tr时要转换两个字符串:字符串1用于查询,字符串2用于处理各种转换。tr刚执行时,字符串1中的字符被映射到字符串2中的字符,然后转换操作开始。
[root@desktop5 tmp]# tr -cds [“原字符串1”] [“改新的字符串2”] < o_file
选项 |
说 明: |
-c |
用字符串1中字符集的补集替换此字符集,要求字符集为ASCII |
-d |
删除字符串1中所有输入字符 |
-s |
删除所有重复出现字符序列,只保留第一个 |
o_file |
是来源文件 |
[a-z] a到z字符串。[A-Z] A到Z的字符串。[0-9] 数字串。
7.wc:word count。计算文件中的行、字、字节或字符数。
8.sort:默认按ascll码排序,升序(第一个字符)。通常与管道一起使用。
选项 |
说 明: |
-r |
反向排序 |
-n |
按数值而非字符排序 |
-f |
忽略大小写。默认小a小于大写A
|
-u |
除去重复的行。同:sort file.txt |uniq -c |
-k x |
设置排序字段(列)。X表示列。 |
-t |
指定分隔符(默认空格) |
9.uniq:“删除”文件中重复的行
选项 |
说 明: |
-u |
仅显示唯一行 |
-d |
显示重复行 |
-c |
每行显示一次(包括出现计数) |
10.sed:查找并替换。强大的流编辑器。主要是行。
选项 |
说 明: |
s/old/new/ |
执行字符串替换,将“old”替换为“new”。第一个匹配 |
s/old/new/g |
g全局 |
1,50s/ |
old/new/g1-50行 |
/root/,/ftp/s |
以root开头的,以ftp结尾的行 |
-e |
连接多个sed |
-f |
复杂的sed,可写在一个文件中。再用sed执行该文件 |
d |
删除匹配的行 |
挑战:如何把nis用户转成passwd文件?
[root@desktop5 tmp]# ypcat passwd >nispasswd
[root@desktop5 tmp]# tail -n 1 nispasswd
如何把第二列换成x,换成x,就是/etc/passwd
sed是流编辑器, -r 正则表达式扩展 主要处理行
[root@desktop5 tmp]# sed -r ‘s/\$1\$.{8}\$.{22}/x/g’ nispasswd
11.awk处理列
如何变成shadow
计算天数:
[root@desktop5 tmp]# vim mddate.sh
for i in $(cut -d: -f1-2 nispasswd)
do
echo “$i:$[$(date +%s)/86400]:0:99999:7:::”
>done
[root@desktop5 tmp]# chmod u+x mddate.sh
[root@desktop5 tmp]# ./mddate.sh>passwd.shadow
过滤/etc/passwd 哪个用户uid是0
awk -F: ‘($3 == 0 {print $1})’ /etc/passwd
awk -F: ‘($3 == “” {print $1})’ /etc/passwd 第二列是空的
sed awk 专门一本书,限量版的。
12.diff:比较2个文件的不同。它还可以用于创建补丁文件。
选项 |
说 明: |
-c |
显示上下文周围的行 |
-u |
使用统一输出格式(对于生成补丁文件很有用) |
-r |
从指定的目录开始对文件执行递归式比较 |
13.patch:修补命令。采用补丁文件patchfile(包含由diff生成的差异列表)并将这些差异用于生成补丁版的一个或多个原始文件。通常,补丁版替换原始文件,指定-b选项时,可以制作备份。将用.orig文件名后缀重命名原始文件。
14.test:测试。
选项 |
说 明: |
-f |
判断文件是否存在 |
-d |
判断是否是目录 |
-x |
判断是否是可执行文件 |
15.read:读取输入和位置参数。