文本处理工具-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

相关推荐

  • bash脚本作业

    1、每隔3秒钟到系统上获取已经登录的用户的信息;如果发现用户hacker登录,则将登录时间和主机记录于日志/var/log/login.log中,并提示该用户退出系统。 2、随机生成10以内的数字,实现猜字游戏,提示比较大或小,相等则退出。 1、求100以内所有正整数之和 2、通过ping命令探测172.16.250.1-254范围内的所有主机的在线状态,…

    Linux干货 2016-08-19
  • 三剑客之sed

    sed命令:Stream EDitor 流编辑器 sed命令的工作流程:     sed会复制原文件中的一行或者多行,逐行进行操作。首先会将该行的内容放入到模式空间内,在模式空间内进行定界或者正则表达式匹配操作。     a.如果该行内容不符合正则表达式或定界,该内容则被判断为No,进行标准输出。 &nbsp…

    Linux干货 2016-08-08
  • Homework Week-2 Linux文件管理

    1、Linux上的文件管理命令都有哪些,其常用的使用方法及其相关示例演示。 文件管理工具:cp, mv, rm         cp命令:copy  源文件  目标文件                单源复制:cp [O…

    Linux干货 2016-08-22
  • test

    test

    Linux干货 2016-08-08
  • linux目录分类和各个目录作用-2016-07-21

    linux目录分类和各个目录作用-2016-07-21 Linux安装以后出现的文件目录的作用:  文件系统的类型  LINUX有四种基本文件系统类型:普通文件、目录文件、连接文件和特殊文件,可用file命令来识别。  普通文件:如文本文件、C语言元代码、SHELL脚本、二进制的可执行文件等,可用cat、less、more、vi…

    Linux干货 2016-08-04
  • 苦上半年时间

    这是一种享受

    Linux干货 2016-08-08