文本处理工具-2

1、 sed 是一种行/流编辑器,它一次处理一行内容;处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space ),接着用sed 命令处理缓冲区中该行内容,处理完成后,把缓冲区的该行内容送往屏幕,接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出,Sed 可以用来自动编辑一个或多个文件。

2、 sed命令的用法(除非使用-i选项,不改变原文件内容)

1)、用法:sed [option]… 'script' inputfile…

2)、常用选项:

-n:不输出模式空间所有行的自动打印,而脚本命令p打印模式空间中被脚本指定地址的行,又因为sed命令本身就默认输出模式空间所有行的自动打印,所有-n选项和脚本命令p的同时使用就只打印模式空间中被脚本指定地址的行

     -e:多点编辑

     -f /PATH/TO/SCRIPT_FILE:从指定文件中读取编辑脚本

     -r:支持使用扩展正则表达式

     -i:原处编辑

    例如#sed –i ‘/^U/r /etc/issue’ fi,屏幕无打印显示,但是修改了原文件fi

    #sed –i ‘/^U/r /etc/issue’ fi

屏幕无打印显示,修改了原文件fi,但是在当前目录生成了fi原文件备份文件ffi.bak

3)、script(脚本)格式:'地址命令',必须同时包含地址和脚本命令,使用多个脚本命令,中间用;分开

script地址定界:

(1)不给地址:对全文进行处理(默认)

(2)单地址:

#:指定的行

/pattern/:被此处模式所能够匹配到的每一行

(3)地址范围:

#,#:从第#行到第#行

#,+#

/pat1/,/pat2/

#,/pat1/

(4)步进:用符号~表示

1~2  奇数行

2~2  偶数行

script编辑命令/脚本命令:

d: 删除模式空间匹配的行,删除的模式空间处理行不再在屏幕上显示

p: 显示模式空间中的内容

a \text:在行后面追加文本;支持使用\n 实现多行追加

i \text:在行前面插入文本;支持使用\n 实现多行插入

c \text:替换为单行或多行文本

w /path/to/somefile: 保存模式匹配的行至指定文件

r /path/from/somefile:读取指定文件的文本至模式空间中匹配到的行后

=: 为模式空间中的行打印行号

!: 模式空间中匹配行取反处理

例如#cat /etc/fstab > fi

#sed ‘3d’ fi,屏幕打印显示的fi文件内容的第三行被删除,但是fi文件本身没有改变

    #sed –n ‘3d’ fi,屏幕上无打印输出

    #sed ‘3,6p’ fi,屏幕打印显示且重复显示3-6行

    #sed –n ‘3,6p’ fi,屏幕打印显示3-6行

    #sed –n ‘1~2p’ fi,屏幕打印显示奇数行

    #sed –n ‘/^U/p’ fi,屏幕打印显示以U开头的行

    #sed ‘/^U/a \xxhhjjkk’ fi,屏幕打印显示且以U开头的行后新行追加文本xxhhjjkk

    #sed ‘/^U/a \xxhhjjkk\nbbccddee\nrtrt’ fi

屏幕打印显示且以U开头的行后分三行分别追加文本xxhhjjkk、bbccddee、rtrt

#sed ‘/^U/w /testdir/U.txt’ fi

 #sed  -n ‘/^U/w /testdir/U.txt’ fi, 把文件fi中以U开头的行存入文件/testdir/U.txt

#sed '/^U/=' fi,打印显示fi文件中以U开头的行的行号

#sed '/^U/!=' fi,打印显示fi文件中非以U开头的行的行号

4)、s///:查找替换, 支持使用其它分隔符,例如s@@@ ,s###

替换标记:

g:行内全局替换,如果不加g,则仅仅替代行中第一个模式匹配

p:显示替换成功的行

w  /PATH/TO/SOMEFILE:将替换成功的行保存至文件中

ffi文件内容:good good good

              xxhhjjkk                              god god god  

例如#sed ‘s/good/god/gp’ ffi,屏幕打印输出结果是:god god god

                                                    xxhhjjkk

但是加上-n选项,输出结果就是:god god god 

    #sed ‘s/good/god/gw /root/fffi’ffi,将替换成功的行保存在文件/root/fffi中

                                                  

5)、示例:

#sed –n ‘2,/root/p’ /etc/passwd  打印显示第2行到第一个包含有root字符的行

#sed –n –e ‘/^$/p’ –e ‘/^$/=’ file 打印显示空行及相应的行号(不打印白行及相应行号)

#sed ‘/^$/d’ file 打印显示删除所有空行,但是原文件没有改变

#sed –n‘s/root/&superman/p’ /etc/passwd  ,第一个root字符串后添加superman

#sed –n‘s/root/superman&/p’ /etc/passwd  ,第一个root字符串前添加superman

#sed -e ‘s/dog/cat/’ -e ‘s/hi/lo/’ pets,所有的dog字符串替换成cat字符串,同时

#sed –i.bak ‘s/dog/cat/g’ pets ,修改原文件时备份原文件为pets.bak

3、sed命令的高级编辑命令/高级脚本命令

1)、高级编辑命令:

其中模式空间相当于多工序加工车间,保持空间相当于临时仓储仓库

h: 把模式空间中的内容覆盖至保持空间中

H:把模式空间中的内容追加至保持空间中

g: 从保持空间取出数据覆盖至模式空间

G:从保持空间取出内容追加至模式空间

x: 把模式空间中的内容与保持空间中的内容进行互换

n: 读取匹配到的行的下一行覆盖至模式空间

N:追加匹配到的行的下一行至模式空间

d: 删除模式空间中的行

D:删当前模式空间中的行

2)示例:

#sed -n 'n;p' FILE,只打印显示偶数行(不考虑n选项,起始自动读第一行进入模式空间,然后判断脚本命令n,读取匹配到的第一行的下一行第二行覆盖至模式空间,而后判断脚本命令p,默认打印第一行第二行同时再次打印第二行;接着读取第三行进入模式空间,然后判断脚本命令n,读取匹配到的第三行的下一行第四行覆盖至模式空间,而后判断脚本命令p,默认打印第三行第四行同时再次打印第四行;依次…;考虑n选项,默认打印不再输出,所以只打印输出偶数行)

   #sed '1!G;h;$!d' FILE,倒序排列,相当于#tac FILE(第一行不执行G,不是第一行就执行G,然后执行第二条命令h,最后一行不删除,不是最后一行就删除;起始自动读第一行进入模式空间,然后判断因为是第一行所以不执行G,接着执行第二条命令h,把模式空间中的第一行覆盖至保持空间,然后判断因为不是最后一行所以情况模式空间,也就不打印显示第一行;第二行进入模式空间…)

   #sed '$!N;$!D' FILE,只留最后两行,相当于#tail -2 FILE

   #sed '$!d' FILE, 只留最后一行,相当于#tail -1 FILE

   #sed ‘G’ FILE,在每行的后面加一空行

   #sed ‘g’ FILE,用空行覆盖每一行

   #sed ‘/^$/d;G’ FILE, 删除所有的空行,然后在每行后加一个空行

   #sed 'n;d' FILE打印显示奇数行

   #sed -n '1!G;h;$p' FILE倒序排列,相当于#tac FILE

 

原创文章,作者:18612763863,如若转载,请注明出处:http://www.178linux.com/31896

(0)
1861276386318612763863
上一篇 2016-08-15 09:24
下一篇 2016-08-15 09:24

相关推荐

  • smb

    练习: 创建一个共享ftp,路径为/var/ftp/pub;要求仅centos和gentoo用户能上传;此路径对其它用户不可见; [root@node1 ~]# yum -y install samba [root@node1 ~]# vim /etc/samba/smb.con…

    Linux干货 2016-10-23
  • 马哥教育网络班21期-第七周课程练习

    1、创建一个10G分区,并格式为ext4文件系统; (1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl; # mkfs.ext4 -b 2048 -m 2 -L MYDATA /dev/sdb1 # mount&…

    Linux干货 2016-08-24
  • 文本处理相关工具

    文本工具       操作系统中,文本的处理这一操作,比如操作一些内容,查看一些内容等等这些东西在linux中都得借助工具来完成对文本的操作。下面来说说对文本处理的工具;  其中:        查看文件内容工具:more、less、cat     &nbsp…

    Linux干货 2016-08-05
  • 【福利招聘】 Base 上海 拍拍货(红杉领投,靠谱金融公司) 共5人

    公司简介 拍拍贷成立于2007年6月,全称为“上海拍拍贷金融信息服务有限公司”,总部位于国际金融中心上海,是中国首批网络信息借贷平台。 拍拍贷是一家由工商部门特批,获批“金融信息服务”的经营范围,得到政府认可的互联网金融平台。拍拍贷用先进的理念和创新的技术建立一个安全、高效、透明的互联网金融平台,规范个人贷款行为,让借入这改善生产生活,让借出者增加投资渠道。…

    Linux干货 2016-12-05
  • jobs简介

    jobs简介     jobs可以显示当前shell 环境中已启动的作业状态。     用linux的时候经常会碰到类似这种情形,复制,下载一个很大的文件或编辑一个文件,任务占据着界面不能做其他操作,这个时候想不暂停或中止任务去做别的操作就可以将正在执行的命令送往后台去运行。 作业:作业号     …

    Linux干货 2015-05-23
  • N25第一周作业-Linux初步认识

    一.描述计算机的组成及其功能。     计算机组成有两部份,一为硬件,二为软件OS         硬件:CPU,负责运算操作。          &…

    Linux干货 2016-12-06