Sed是一款流编辑工具,用来对文本进行过滤与替换操作,特别是当你想要对几十个配置文件做统一修改时,你会感受到Sed的魅力!sed通过一次仅读取一行内容来对某些指令进行处理后输出,
所以sed更适合于处理大数据文件。首先,Sed通过文件或管道读取文件内容,
但Sed默认并不直接修改源文件,而是将读入的内容复制到缓冲区中,我们称之为模式空间( patterm space),
所有的指令操作都是在模式空间中进行的,然后Sed根据相应的指令对模式空间中的内容进行处理并输出结果,默认输出至标准输出(即屏幕上)。
语法格式
sed [-hnV][-e<script>][-f<script文件>][文本文件]参数说明
-e<script>或--expression=<script> 以选项中指定的script来处理输入的文本文件。 -f<script文件>或--file=<script文件> 以选项中指定的script文件来处理输入的文本文件。 -h或--help 显示帮助。 -n或--quiet或--silent 仅显示script处理后的结果。 -V或--version 显示版本信息。
动作说明
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~ c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行! Y :按字符转换 W:保存至文件 d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚; i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行); l :打印(显示非打印字符) L:打印(不显示非打印字符) p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~ s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!
标记
g 表示行内全部替换,ng表示第n个匹配的开始进行替换 w 表示把行写入一个文件 \1 字串匹配标记(划重点) & 已匹配字符串标记示例1:在文件第6行添加一行
1、test.txt文件内容
[root@localhost myproject]# sed -e 6a\newline test.txt
[root@localhost myproject]# sed '6d' test.txt
删除后同时把修改后的内容保存到原文件中
[root@localhost myproject]# sed '6d' test.txt >>test.txt
test.txt原内容
2017-8-31 13:52:53 org.apache.coyote.http11.Http11Protocol init 信息: Initializing Coyote HTTP/1.1 on http-8080 2017-8-31 13:52:53 org.apache.catalina.startup.Catalina load 信息: Initialization processed in 471 ms 2017-8-31 13:52:53 org.apache.catalina.core.StandardService start 信息: Starting service Catalina 2017-8-31 13:52:53 org.apache.coyote.http11.Http11Protocol init 信息: Initializing Coyote HTTP/1.1 on http-8080 2017-8-31 13:52:53 org.apache.catalina.startup.Catalina load 信息: Initialization processed in 471 ms 2017-8-31 13:52:53 org.apache.catalina.core.StandardService start 2017-8-31 13:52:53 org.apache.coyote.http11.Http11Protocol init 信息: Initializing Coyote HTTP/1.1 on http-8080 2017-8-31 13:52:53 org.apache.catalina.startup.Catalina load 信息: Initialization processed in 471 ms 2017-8-31 13:52:53 org.apache.catalina.core.StandardService start 信息: Starting service Catalina newline 2017-8-31 13:52:53 org.apache.coyote.http11.Http11Protocol init 信息: Initializing Coyote HTTP/1.1 on http-8080 2017-8-31 13:52:53 org.apache.catalina.startup.Catalina load 信息: Initialization processed in 471 ms 2017-8-31 13:52:53 org.apache.catalina.core.StandardService start
[root@localhost myproject]# sed 's/newline/newlinereplace/g' test.txt