流编辑程序sed语法小结
时间:2007-04-25 来源:freewildwolf
1、 语法格式
sed ‘ 一系列ed命令 ’ 文件名…
2、 一个例子程序
sed ‘s/ ^ / -> / ’ $*
sed ‘ / . / s/ ^ / -> / ’ $*
sed ‘ / ^$ / ! s/ ^ / -> / ’ $*
以上三行程序的功能一样,都是在每一行前面加上Tab。但是第一行程序没有排除空行。
3、 打印
sed 默认会打印匹配的每一行,但是可以使用-n选项将其关闭。在这种情况下,只有用P命令显式说明的行才出现在输出中。如
sed –n ‘ / 模式 /p ’
sed –n ‘ / 模式 /!p ’
4、 命令文件
还可以将ed命令置于一个文件中,使用-f参数调用文件执行
sed –f‘ 命令文件 …
5、sed命令汇总
命令 |
含义 |
a \ |
将行添加到输出直到不以\为终结的行 |
b 标号 |
转至命令:标号 |
c \ |
对随后的文本,如同a命令那样逐行修改 |
d |
删除行,读下一个输入行 |
i \ |
在下一个输出前插入下面的文本 |
l |
按行列表,使所有非打印字符可见 |
p |
打印行 |
q |
退出 |
r 文件 |
读文件,拷贝内容到输出 |
s/old/new/f |
用新串替代旧串,若f=g,置换所有的变化;f=p,打印;f=w写入文件 |
t 标号 |
测试:若对当前行做了替换,转至标号 |
w 文件 |
将行写到文件 |
y/串1/串2 |
用串2中对应的字符替换串1中的每个字符(不支持范围值) |
= |
打印当前输入行号 |
!命令 |
当行未被选取使,执行命令 |
:标号 |
为b和t 命令设置标号 |
{ |
将{}之间的命令视作一组 |
6、多命令行
例子:
sed –n ‘ / 模式 / w file1
/ 模式 / w file2 ‘ 文件名…
7、例子
sed ‘ / 模式 / q’ --------------------打印其输入直至包含与模式匹配的第一行;
sed ‘/ 模式 / d’ ---------------------删除包含模式的每一行;
sed –n ’20,30p’ ----------------------仅打印20至30行;
sed ‘1,10d ’ ----------------------删除1至10行(=tail+11);
sed ‘1, /^$/d’ -----------------------删除直至包括第一个空行
sed –n ‘/^$/, /^end/p’ -------------打印每一个从一空行至一始于end的这样的行组;
sed ‘$d’ -----------------------删除最后一行
更多例子:
------------------------------------------------------------
1. 将 filename 档案内的 Giga 字串取代成 GigaRama
sed s/Giga/GigaRama/ filename
---------------------------------------------------------------
2. 将 filename 档案内的 xfish 字串那一行删除
sed /xfish/d filename
---------------------------------------------------------------
3. 指定哪一行,将之删除
sed '4d' filename
---------------------------------------------------------------
4. 或指定第一行到第几行,将之删除
sed '1,4d' filename
---------------------------------------------------------------
5. 将第一行到第五行印出
sed -n 1,5p filename
---------------------------------------------------------------
6. 将 file 档案内的出现 xfish 字串的那一行单独写到 file2 内
sed -n '/xfish/w file2' file
---------------------------------------------------------------
7. 万用字元的使用,将 file 档案内的 xfis? 哪一行写到 file2 内
sed '/xfis./w file2' file
---------------------------------------------------------------
8. 万用字串的使用,将 file 档案内的 xfis* 哪一行写到 file2 内
sed '/xfis*/w file2' file
---------------------------------------------------------------
9. 选定字元的使用,将 file 档案内的 xfis[abcd] 哪一行写到 file2 内
sed '/xfis[abcd]/w file2' file
---------------------------------------------------------------
10. 特别符号的取消,利用 /
sed s/\<title\>/\<TITLE\>/ file
---------------------------------------------------------------
11. 一行的起头的取代,将 file 档案的每一行起头都加上 Hi..
sed s/^/Hi.. / file
---------------------------------------------------------------
12. 一行的结尾的取代,将 file 档案的每一行结尾都加上 Hi..
sed s/$/Hi.. / file