高级sed编程
sed编辑器提供的一些更高级的功能; 1、多行命令sed依据是行来进行数据处理,但是有时候我们需要对多行进行处理,该如何进行呢? sed有3个命令用于多行处理:N,在数据流中添加下一行以创建用于处理的多行组;D,删除多行组中的单个行;P,打印多行组中的单个行。 1.1、next命令1、单行next命令 next命令(n)修改了sed数据处理文本的方式(默认是一行一行处理的) 删除 header所在行的,下一行; $ sed ‘/^$/d‘ data1 #删除所有的空白行 2、组合多行文本 N 将文本的下一行添加到已经存在于模式空间的文本中。其效果类似于将数据流中两个文本行合并,添加到同一个模式空间中。 将n回车 替换为 空格字符; 短语跨行出现的时候,如何替换? 1.2、多行删除命令D用来删除文本内容。但是如果跨行删除,就需要结合 N 命令一起完成; $ sed ‘ > N > /SystemnAdminstrator/D > ‘ data3 删除第一行之前的空行示例: $ sed ‘/^$/{ > N > /header/D > }‘ data5 1.3、多行打印命令多行打印,N与P结合使用 $ sed -n ‘ > N > /SystemnAdministrator/P > ‘ data3 2、保留空间pattern space模式空间是一个活动的缓冲区,它不是存储文本唯一可用空间。 sed编辑器利用另一个称为保留空间(hold space)的缓冲区。5个命令与其相关 $ cat data2 This is the header line. This is the first data line. This is the second data line. This is the last line. $ sed -n ‘/first/{ #选出first字符的行 > h #选出行,放入到保留空间中 > p #打印模式空间的内容 > n #检索下一行的内容,并放入到模式空间中 > p #打印模式空间的内容,现在的第二行内容 > g #保留空间的内容返回到模式空间中,替换当前文本 > p #打印模式空间的内容,它现在回到第一行数据 > }‘ data2 This is the first data line. This is the second data line. This is the first data line. $ sed -n ‘/first/{ > h > n > p > g > p > }‘ data2 This is the second data line. This is the first data line. 3、否定命令! 感叹号,表示否定。 $ -n ‘/header/!p‘ data2 This is the first data line. This is the second data line. This is the last line. next命令中,sed编辑器不能对数据流中的文本的最后一行执行操作,因为最后一行没有下一行。可以使用感叹号修复这个问题: $ sed ‘{ > !N > /System.Administrator/Desktop User/ > }‘ data4 还可以用于翻转数据文本的行的顺序。工作流程如下: (1)将第一行放到保留空间中 (2)将文本的下一行放到模式空间中 (3)将保留空间最佳到模式空间中 (4)将模式空间放到保留空间 (5)重复第2步到第4步,直至将所有行以相反的顺序放到保留空间。 (6)检索行并打印它们。 $ sed -n ‘{ > 1!G > h > $p > }‘ data2 4、更改命令流默认sed命令从头运行到尾结束,但是有时候我们需要改变这个运行环境; 4.1、分支一些命令容许我们只在数据流的特定自己上执行一组命令。分支命令格式: [address]b [label] address:决定在哪行或哪些行执行分支命令; label:参数定义于何处分支。 $ sed ‘{ > 2,3b #跳过2,3两行为address > s/This is/Is this/ > s/line./test?/ > }‘ data2 $ sed ‘{ > /first/b jump1 #出现first字符,则跳转到以jump1为标记的行 > s/ is/ might be/ > s/line/test/ > :jump1 > s/data/text/ > }‘ data2 sed脚本根据后面标签情况,还可以分支到出现在脚本前面的标签,这样创建一个循环效果: $ echo "This,is,a,test,to,remove,commas." | sed -n ‘{ > :start > s/,//1p > b start > }‘ 4.2、测试t 命令用作测试。使用格式: [address]t [label]
5、模式替换5.1、与号5.2、替换个别单词6、脚本中使用sed6.1、使用包过滤器6.2、重定向sed输出7、创建sed工具7.1、双倍行距7.2、对可能有空行的文件使用双倍行距7.3、对文件中的行计数7.4、打印最后几行7.5、删除行7.6、删除HTML标记(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |