strem editor 流编辑器
sed 编辑器是一行一行的处理文件内容的
sed可以用来 增 删 改
常用用法:
对一行执行自己写的script
sed -e 4a\newLine testfile 在testfile文件的第四行后添加一行,并将结果输出到标准输出
其中 -e<script>或--expression=<script> 以选项中指定的script来处理输入的文本文件。
再比如:
输出一些文件 | sed -e 's/\(\<.*\>\.o\)/obj\/\1/' > a.txt
就把这些文章中的 <***>.o 改成 obj/1
你还可以一行执行两个操作:
一条sed命令,删除/etc/passwd第三行到末尾的数据,并把bash替换为blueshell
nl /etc/passwd | sed -e '3,$d' -e 's/bash/blueshell/' 1 root:x:0:0:root:/root:/bin/blueshell 2 daemon:x:1:1:daemon:/usr/sbin:/bin/sh
有选择打印
sed -n '1,3p' /etc/passwd 显示1-3行的内容 或者是nl /etc/passwd | sed -n '1,3p'
sed -n '1,3!p' /etc/passwd 加感叹号就是除了1-3显示其他所有内容
nl /etc/passwd | sed '/root/p' 搜索 /etc/passwd有root关键字的行
插入
在文件的头插入“###”,在文件尾插入“@@@”,把文件第三行替换成“$$$”
sed '1i###' /etc/passwd > a.txt 重定向
sed '1i###' /etc/passwd >> a.txt 追加
> 输出重定向:会将原来的文件内容覆盖
>>追加:不会覆盖原来文件的内容,而是追加到文件的尾部
sed '$a@@@' /etc/passwd >> a.txt 在文件尾部追加@@@ $代表尾部a代表追加
字符串替换
sed 's/要被取代的字串/新的字串/g'
删除
将 /etc/passwd 的内容列出并且列印行号,同时,请将第 2~5 行删除!
[root@www ~]# nl /etc/passwd | sed '2,5d'
Eg:
如果是要增加两行以上,在第二行后面加入两行字,例如 Drink tea or ..... 与 drink beer?
[root@www ~]# nl /etc/passwd | sed '2a Drink tea or ......\
> drink beer ?'
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
Drink tea or ......
drink beer ?
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
.....(后面省略).....
每一行之间都必须要以反斜杠『 \ 』来进行新行的添加喔!所以,上面的例子中,我们可以发现在第一行的最后面就有 \ 存在。
将第2-5行的内容取代成为『No 2-5 number』呢?
[root@www ~]# nl /etc/passwd | sed '2,5c No 2-5 number'
1 root:x:0:0:root:/root:/bin/bash
No 2-5 number
6 sync:x:5:0:sync:/sbin:/bin/sync
动作说明:
- a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
- c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
- d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
- i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
- p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
- s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!