文本处理工具sed
来源:互联网 发布:斗牛开挂软件 编辑:程序博客网 时间:2024/05/18 02:56
- 常规编辑器编辑困难的文本。
- 太过庞大的文本,使用常规编辑器难以胜任(如vi一个几百兆的文件)。
- 有规律的文本修改,加快文本处理速度(比如说全文替换)。
h
复制模板块的内容到存储空间H追加模板块的内容到存储空间g将存储空间的内容复制到模式空间G将存储空间的内容追加到模式空间n读取下一个输入行,用下一个命令处理新的行N追加下一个输入行到模板块后并在二者间插入新行p打印匹配的行P打印匹配的第一行q退出sedr从外部文件中读取文本w追加写文件!匹配的逆s/old/new用new替换正则表达式old=打印当前行号
sed常用的参数:
sed参数作用-e多条件编辑-h帮助信息-n不输出不匹配的行-f指定sed脚本-V版本信息-i直接修改原文件
sed常用的正则表达式匹配:
使用sed修改文件流的方法如下:
下面的例子演示了将this改为that的同时,还要讲line改为LINE,两个编辑命令前都要使用-e参数,如果有更多的编辑需求,以此类推
使用分号(;)连接两个都编辑的命令,上面的命令用分号也可达到同样的效果:
删除
使用d命令可删除指定的行:
由于sed默认不修改原文件,如果希望保存修改后的文件则需要用重定向:
如果想直接修改文件,使用 -i 参数,这样的方式不会有任何输出,而是直接修改了源文件
删除指定范围的行 :
删除1-3行:
删除第一行当最后一行:
删除最后一行:
删除指定范围以外的行(只保留第五行):
删除所有包含Empty的行:
删除空行:
查找替换
使用s命令可将查找到的匹配文本内容替换成新的文本
s命令用于替换文本
将每行第一个line替换成LINE:
以上只是把每一行的第一个line被替换了,'s/old/new/' 默认情况下只替换第一次匹配到的内容
将每行匹配到2个line,并改为LINE:
s命令利用g选项,可以完成所有匹配值的替换(全文替换):
字符转换
使用y命令可进行字符转换,其作用为将一系列字符逐个地变换为另外一系列字符,基本用法如下:
该命令会将file中的o转换为n、l转换成e、d转换成w
注意转换字符和被转换字符的长度要相等,否则sed无法执行
将数字1转换为A,2转换为B,4转换为D,5转换为E:
插入文本
使用i或a命令插入文本,其中i代表在匹配行之前插入,而a代表在匹配行之后插入
使用i在第二行前插入文本:
使用a在第二行后插入文本:
在匹配行的上一行插入文本:
读入文本
使用r命令可从其他文件中读取文本,并插入匹配行之后
将/etc/passwd 中的内容读出放到sed.txt空号之后
打印
使用p命令可进行打印,这里使用sed命令时一定要加-n参数,表示不打印没关系的行。从之前的例子可以看出,由于sed的工作原理是基于行的,因此每次都有大量的输出。可是这些输出中有一些我们并不需要看到的,而只需要输出匹配的行或者处理过的行就好了。简单来说,打印操作是删除操作的“逆操作”。
打印出文件中指定的行:
将the替换成THE,sed实际处理了第二行,其他几行由于没有匹配所以并未真正处理,但是sed的工作原理是基于流的,所以所有流过的行都打印出来了:
使用p命令,则只打印实际处理过的行,简化了输出(使用-n参数):
写文件
sed本身默认并不改写原文件,而只是对缓存区的文本做了修改并输出到屏幕。所以想保存文件,除了之前提到的两种方法外(使用重定向或-i参数),还可以使用w命令将结果保存到外部指定文件。
sed脚本
在平日的工作中,需要定期对一些文件做分析操作,这种例行的工作往往有一定“标准化” 的操作,比如说先去除文件中所有的空行,然后再全部替换某些字符等,这种过程类似于生产线上程式化的流水作业。事实上,可以把这些动作静态化地写到某个文件中,然后调用sed命令并使用-f参数指定该文件,这样就可以将一系列动作“装载”并应用于指定文件中,这无疑加快了工作效率,这种文件就是sed脚本。
如,创建sed.rules脚本文件,该sed脚本的作用是将全文的this改为THAT,并删除所有空号