sed可依照 的指令,来处理、编辑文本文件。
sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。
语法 sed [-hnV][-e< >][-f< 文件>][文本文件]
参数说明:
- -e< >或-- =< > 以选项中指定的 来处理输入的文本文件。
- -f< 文件>或--file=< 文件> 以选项中指定的 文件来处理输入的文本文件。
- -h或--help 显示帮助。
- -n或--quiet或--silent 仅显示 处理后的结果。
- -V或--version 显示版本信息
- -i∶直接修改读取的档案内容,而不是由屏幕输出。
动作说明:
- a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
- c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
- d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
- i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
- p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
- s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g
实例
1、在testfile.txt第一行后面添加一行newLine,并将结果输出到屏幕上:
sed -e 1a ewLine testfile |
|---|
需要注意的是,这种-e的方法并没有在文件内部真正添加这一行数据,只是在终端的显示上面添加了。
如果需要增加多行,则需要在增加的内容上利用 换行
2.以行为单位的新增,删除
将 testfile.txt中的内容列出并且列印行号,同时,请将第 2~4 行删除!
nl testfile.txt | sed '2,4d'或者sed '2,4d' testfile.txt |
|---|
要删除第 3 到最后一行
nl testfile.txt | sed '3,$d'或者sed '3,$d' testfile.txt |
|---|
这里的$符号,就是最后一行的意思
如果要在第二行前面添加一行,内容为'new line 2',命令如下:
nl testfile.txt | sed '2i new line 2'或者sed '2i new line 2' testfile.txt |
|---|
3.以行为单位的替换和显示
如果我们想把第2-4行的数据替换为 line 2~4,可以使用下面的命令:
nl testfile.txt | sed '2,4c line 2~4'或者sed '2,4c line 2~4' testfile.txt |
|---|
将文件从第3行到最后一行打印出来:
nl testfile.txt | sed -n '3,$p'或者sed '3,$p' testfile.txt |
|---|
4.数据搜寻处理
搜索 testfile.txt中包含有关键字‘4’的行
nl testfile.txt | sed -n '/4/p'或者sed -n '/4/p' testfile.txt |
|---|
数据的搜寻并执行命令,搜索testfile.txt,找到关键字‘4’对应的行,执行后面花括号中的一组命令,每个命令之间用分号分隔,这里把4替换为four,再输出这行:
数据的搜寻并替换
除了整行的处理模式之外, sed 还可以用行为单位进行部分数据的搜寻并取代。基本上 sed 的搜寻与替代的与 vi 相当的类似!有点像这样:
sed 's/要被取代的字串/新的字串/g' |
|---|
举个例子,我们查看自己电脑的ip地址,如下:
如果我们相用一条命令把这个inet addr查出来,应该怎么做呢?
首先通过命令找到inet addr这一行,
将inet addr前面的部分删除:
ifconfig eth3|grep 'inet addr'|sed 's/^.*addr://g' |
|---|
注意,其中的^.*addr:代表的是从开始到addr:前面的字符。后面的双斜线里面什么都没写,说明是替换为空串,也就是删除的意思。
再讲inet addr后面的部分删除:
ifconfig eth3|grep 'inet addr'|sed 's/^.*addr://g'|sed 's/Bcast.*$//g' |
|---|
Bcast.*$指的是从Bcast到最后面的字符。后面的双斜线里面什么都没写,说明是替换为空串,也就是删除的意思。
这样,我们就直接得到了一个IP地址。
5.危险动作:直接修改文件内容
上面所述的四种方法,都是不直接修改文件内容的,他们仅仅修改文件在控制台输出的结果,当我们想要直接修改文件内容的时候,需要添加-i参数,这里我们进行一些实验,首先我们编辑一个测试文件testfile2.txt,内容如下:
我们可以看到,每一行都是一个单词加一个符号,前四行是以.结尾,后面两行是以-结尾,我们首先进行如下操作,将以.结尾的行,换成!结尾,命令如下:
sed -i 's/.$/!/g' testfile2.txt |
|---|
我们对这个命令进行解释:替换命令内部结构依旧是s/旧字符串/新字符串/g的模式,这里的旧字符是' .$ ',而新字符串是' ! ' ,这里使用反斜线屏蔽特殊含义
6.其他的一些应用
删除匹配行
sed -i '/匹配字符串/d' filename
(注:若匹配字符串是变量,则需要“”,而不是‘’。记得好像是)
替换匹配行中的某个字符串
sed -i '/匹配字符串/s/旧字符串/新字符串/g' filename
继续阅读与本文标签相同的文章
一个.git引发的惨案
Linux sed命令的应用
-
Linux操作系统中的重要目录
2026-05-26栏目: 教程
-
Go语言学习计划和一些总结
2026-05-26栏目: 教程
-
springboot整合shiro应用
2026-05-26栏目: 教程
-
zookeeper的图形化展示
2026-05-26栏目: 教程
-
springboot整合kafka应用
2026-05-26栏目: 教程
