sed 命令

来源:互联网 发布:五毛钱特效app软件 编辑:程序博客网 时间:2024/05/22 14:01
全文转自:http://blog.chinaunix.net/uid-26878902-id-3249616.html
一、man sed
1. 描述
sed 是一个流编辑器(stream editor)。流编辑器是用来对一个输入流(一个文档或管道输入)进行基础上下文转换的。虽然和一些允许脚本编辑的编辑器形似,但是 sed 仅仅允许经过一次输入,这使得 sed 比前者更有效率。与其它编辑器不同的是,sed 还具备过滤管道的内容的能力。
2.格式
sed [-nefri] [动作]
3.参数
-e:直接在命令行模式上进行 sed 的动作编辑;
-f :直接将 sed 的动作写在一个文件内,-f filename 则可以执行 filename 内的 sed 动作;
-i :直接修改读取的文件内容,而不是由屏幕输出;
-n:使用安静(silent)模式,在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到屏幕上,但如果加上 -n 参数后,则只有经过 sed 特殊处理的那一行(或者操作)才会被列出;
二、动作说明
动作说明:[n1,[n2]]function
n1,n2:不见得会存在,一般代表选择进行动作的行数,举例来说,如果我的动作是需要在10到20行之间进行的,则“10,20[动作行为]”。
function 有下面这些参数:
a:新增,a 的后面可以接字符串,而这些字符串会在新的一行出现(目前的下一行);
c:替换,c 的后面可以接字符串,这些字符串可以替换n1,n2之间的行;
d:删除,因为是删除,所以 d 后面通常不接任何参数;
i :插入,i 的后面可以接字符串,而这些字符串会在新的一行出现(目前的上一行);
p:打印,通常 p 会与参数 sed -n 一起运行;
s:替换,通常这个 s 动作可以搭配正则表达式!例如 1,20s/old/new/g 就是。
三、u-boot-1.1.6/Makefile 中的 sed 示例
1.第31-37代码如下:
  1. HOSTARCH := $(shell uname -m | \
  2. sed -e s/i.86/i386/ \
  3. -e s/sun4u/sparc64/ \
  4. -e s/arm.*/arm/ \
  5. -e s/sa110/arm/ \
  6. -e s/powerpc/ppc/ \
  7. -e s/macppc/ppc/)
把其中的命令复制到命令行上,输出的结果是:i386。如果只输入"uname -m"的话,输出结果是:i686。由此可以看出,是命令中的“sed -e s/i.86/i386/”把"i686"替换成了"i386"。
注意:
(a)可以看到 “uname -m sed -e s/i.86/i386/” 与“uname -m sed s/i.86/i386/” 有相同的输出结果。
(b)在《鸟哥的linux私房菜》/ P358 中有这么一句话“另外,注意一下,原本应该是要执行 sed -e 才对,没有 -e 也行”。