概述
Linux sed 命令是利用脚本来处理文本文件。sed 可依照脚本的指令来处理、编辑文本文件。Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。
语法
sed [-hnV][-e<script>][-f<script文件>][文本文件]
注意:-e是可以省略掉的,如果要省略的话,就需要将后面要执行的脚本放在引号里面。
参数说明
- -e
动作说明
- a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
- c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
- d :删除,因为是删除啊,所以 d 后面通常不接任何东东;
- i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
- p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
- s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正则表达式!例如 1,20s/old/new/g 就是啦!
示例
- 在test文件第四行之后添加alibaba输出
sed -e 4a\alibaba test
或者
sed '4a\alibaba' test
注意:反斜杠可以用空格代替
- 删除第三行到最后一行
nl testfile | sed '3,$d'
- 在第二行前加上alibaba
nl test | sed '2i alibaab'
- 增加两行字,则需要使用反斜杠
nl test | sed '2a alibaba \
alibaba'
- 将2-3行进行替换
nl test | sed '2,3c alibaba\
> alibaba'
- 只打印1-3行
nl test | sed -n '1,3p'
- 只打印含有kj的
nl test | sed -n '/kj/p'
- 只打印不含有kj的
nl test | sed '/kj/d'
- 找到kj对应的行,然后进行字符替换并输出
nl test | sed -n '/kj/{s/kj/alibaba/;p}'
- 进行全局替换,不再对行进行处理
g 标识符表示全局查找替换,使 sed 对文件中所有符合的字符串都被替换,修改后内容会到标准输出,不会修改原文件
nl test | sed 's/dk/alibaba/g'
- 选项i对文件进行修改,将所有的df替换成al
sed -i 's/df/ali/g' test
- 显示bond0的ip地址
ifconfig bond0 | grep inet | sed 's/^.*inet//' | sed 's/netmas.*$//g'
这里的.*
表示任意字符串开头,任意字符串结尾的数字
,
不加
表示任意字符串开头,任意字符串结尾的数字,不加
表示任意字符串开头,任意字符串结尾的数字,不加也是可以的
而^.*表示的是任意字符串开头的字符串,这样就把前面和后面都去掉了。
- 多点编辑
多点编辑的时候就不能省略 -e选项了
nl test | sed -e '1,2d' -e 's/ali/ll/g'
sed -i 可以直接对源文件进行修改,谨慎使用嗷。