sed和gawk介绍
知识体系:
#使用文本文件
#探索sed
#探索gawk
shell脚本可以把处理文本中包含的所有类型的数据这样的普通任务自动化.然而,只使用shell脚本命令处理文本文件的内容却有些麻烦.如果要 在shell脚本中进行任何类型的数据处理,就要熟悉linux中现有的sed和gawk工具了.这两个命令行编辑器能够方便地格式化、插入、修改和删除文本元素.
1、文本处理
1.1、sed编辑器
sed编辑器称为流编辑器(stream editor),能根据在vim、vi等编辑器处理数据之前事先提供的规则集编辑数据流.它每次从输入读取一行数据,将该数据与所提供的编辑器命令进行匹配,根据命令修改数据流中的数据,然后将新数据输出到STDOUT.
使用sed命令格式:
sed option xxx(script file)
options参数允许自定义sed命令的行为,如下表:
***********************************************************
选项 描述
-e script 将脚本中指定的命令添加到处理输入时执行的命令中
-f file 将文件中指定的命令添加到处理输入时执行的命令中
-n 不需要为每个命令产生输出,但要等待打印命令
***********************************************************
1.1.1、在命令行中定义编辑器命令
默认情况下,sed编辑器将指定的命令应用于STDIN输入流,这就允许将数据直接管道传送给sed编辑器处理,如下例子:
[root@wzp ~]# echo "welcome to tencent" | sed ''s/tencent/51cto/''
welcome to 51cto
该例在sed编辑器中使用了s命令,表示说第二个文本字符替换第一个两个斜杠之间的文本字符,如上通过51cto替换了tencent.
拥有帝国一切,皆有可能。欢迎访问phome.net
当然,如上只是编辑了一行数据,在一个数据文件中也可以通过sed处理:
[root@wzp ~]# cat testfile
welcome to http://blog.51cto.com
welcome to http://blog.51cto.com
welcome to http://blog.51cto.com
[root@wzp ~]# sed ''s/blog/twentyfour.blog/'' testfile
welcome to http://twentyfour.blog.51cto.com
welcome to http://twentyfour.blog.51cto.com
welcome to http://twentyfour.blog.51cto.com
或者通过cat借助管道查看:
[root@wzp ~]# cat testfile | sed ''s/blog/twentyfour.blog/''
welcome to http://twentyfour.blog.51cto.com
welcome to http://twentyfour.blog.51cto.com
welcome to http://twentyfour.blog.51cto.com
sed命令执行与返回数据几乎同时进行,但是sed编辑器并不修改文本文件中的数据,它只是把文本内容修改后发送到STDOUT,原文本文件没有改动过.
[root@wzp ~]# cat testfile
拥有帝国一切,皆有可能。欢迎访问phome.net
welcome to http://blog.51cto.com
welcome to http://blog.51cto.com
welcome to http://blog.51cto.com
1.1.2、在命令行中使用多个编辑器命令
要从sed命令行执行多个命令,只需要使用-e选项:
[root@wzp ~]# sed -e ''s/blog/www/;s/51cto/baidu/'' testfile
welcome to http://www.baidu.com
welcome to http://www.baidu.com
welcome to http://www.baidu.com
两个命令同时应用于文件中的每一行数据,命令使用分号隔开.
当然,也可以使用此提示符,而不用分号分隔命令:
[root@wzp ~]# sed -e ''
> s/blog/www/
> s/51cto/wzp/'' testfile
welcome to http://www.wzp.com
welcome to http://www.wzp.com
welcome to http://www.wzp.com
这里需要注意的是:要在后单引号出现的这一行完成整个命令,bash检测到后引号后就处理命令.
1.1.3、从文件读取编辑器命令
拥有帝国一切,皆有可能。欢迎访问phome.net
如果说,有太多的sed命令要处理,那么可以将他们保存在一个独立的文件中,然后在使用sed命令时候使用-f选项指定文件,如下例:
[root@wzp ~]# cat script24
s/blog/www/
s/51cto/163/
这里不需要使用分号和单引号了,sed编辑器将每一行视为单独一个命令.
[root@wzp ~]# sed -f script24 testfile
welcome to http://www.163.com
welcome to http://www.163.com
welcome to http://www.163.com
通过调用script24这个预先指定好的文件就可以实现数据的处理.
|