首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

sed总结

2012-09-18 
sed小结?sed [options] command file(s) ??sed [options] -f scriptfile file(s) ??1.options-n 取消默

sed小结

?

sed [options] 'command' file(s) ??

sed [options] -f scriptfile file(s) ?

?

1.options

-n 取消默认输出,只有经过sed特殊处理行(或者动作)才会被列出来

-e 多重编辑模式

-f 指定sed脚本文件名

?

2. command

---------------------------------------------------------------

?

d ?从模板块(Pattern space)位置删除行

p ?打印模板块的行

?

sed '3d' file

sed '3,$d' file

sed '/line/'d file

?

sed 's/^[ ]*/g' file ? # ?delete spaces in front of each row

sed 's/^ */g' file ? ? # ?same as above

sed 's/^[[:space:]]*//g file # ?same as avove

?

echo "abc start\nefg middle\nhij end\nover" | sed -n '/start/,/middle/p' ? # "abc start\nefg middle"

echo "abc start\nefg middle\nhij end\nover" | sed -n '2,/end/p' ? # "efg middle\nhig end"

echo "abc start\nefg middle\nhij end\nover" | sed -n '/start/,/middle/s/$/123/p' ? # "abc start123\nefg middle123"

?

echo "abc\ndef\nghi\njkl" | sed -n '/def/p'# def ?<=> grep def

echo "abc\ndef\nghi\njkl" | sed '/def/!d'# def ?<=> grep def

echo "abc\ndef\nghi\njkl" | sed -n '/def/!p'# "abc\nghi\njkl" ?<=> grep -v def

echo "abc\ndef\nghi\njkl" | sed '/def/d'# "abc\nghi\njkl" ?<=> grep -v def

echo "abc\ndef\nghi\njkl" | sed -n ?'/def/{g;1!p;};h'# ?abc, 匹配行的前一行

echo "abc\ndef\nghi\njkl" | sed -n ?'/def/{n;p}'# ?ghi, 匹配行的后一行

?

?

---------------------------------------------------------------

?

s/re/string/ ?用string替换正则表达式re

echo "abcdefg" | sed 's/abc/123/g' ? ? ? ?# 123defg

echo "abcdefg" | sed -n 's/^abc/123/p' ? ?# 123defg

echo "abcdefg" | sed 's#\(abc\)defg#\1#' ?# abc

?

---------------------------------------------------------------

?

r file 从file中读行 ?eg: file contains "123\n456"

echo "abc\ndef" | sed '/abc/r file' ? # abc\n123\n456\ndef

?

w file ?向file中写行,清空原有文件内容

echo "abc\ndef" | sed -n '/abc/w file' ?# now, file content is "abc"

?

---------------------------------------------------------------

?

a\ 当前行后面加入一行文本

echo "abc\ndef" | sed '/^abc/a\123' ?# "abc\n123\ndef", '\'换行时,不可少,最后一行,可省略

?

i\ 在当前行前面插入一行文本

echo "abc\ndef" | sed '/^abc/i\123' # “123\nabc\ndef"

?

----------------------------------------------------------------

h ?将 hold space 中的内容使用 pattern space 中的内容来替换(清空暂存缓冲区)

H ?将 hold space 中的内容使用 加上一个 trailing newline,而后 append pattern space(不清空暂存缓冲区)

?

g ?将 pattern space 中的内容使用 hold space 中的内容来替换

G ?将 pattern space 中的内容使用 加上一个 trailing newline,而后 append hold space

?

! ? 表示后面的命令对所有没有被选定的行发生作用

echo "abc\ndef\nghi" | sed -e '/def/h' -e '$G' ?# ?"abc\ndef\nghi\ndef"

echo "abc\ndef\nghi" | sed -e '/def/H' -e '$G' ?# ?"abc\ndef\nghi\n\ndef"

echo "abc\ndef\nghi" | sed -e '/def/h' -e '$g' ?# ?"abc\ndef\ndef"

echo "abc\ndef\nghi" | sed -e '/def/H' -e '$g' ?# ?"abc\ndef\n\ndef"

?

echo "abc\ndef\nghi\njkl" | sed '1!G;h;$!d' ? ? # ?"jkl\nghi\ndef\nabc"

?

echo "abc\ndef" | sed G ? ? ? ? ? ? ? ? ? ? ? ? # ?"abc\n\ndef\n"

echo "abc\n\n\ndef" | sed '/^$/d;G'# ?"abc\n\ndef\n"

?

echo "abc\ndef\nghi\njkl" | sed '/def/{x;p;x;}' # ?"abc\n\ndef\nghi\njkl", add a blank line before the matching one

echo "abc\ndef\nghi\njkl" | sed '/def/G'# ?"abc\ndef\n\nghi\njkl", add a blank line after the matching one

echo "abc\ndef\nghi\njkl" | sed '/def/{x;p;x;G}'# ?"abc\n\ndef\n\nghi\njkl", add a blank line before and after the matching one

?

?

----------------------------------------------------------------

?

n ?读取下一个输入行,用下一个命令处理新的行而不是用第一个命令

echo "abc\ndef" | sed '/abc/{n;s/e/E/;}' # ?"abc\ndEf"

echo "abc\ndef\nghi\njkl" | sed 'n;d' ?# ?"abc\nghi", delete the even lines

?

y与tr类似,字符替换

echo "abc\ndef" | sed '1y/abcdef/ABCDEF/' ?# ?"ABC\ndef"

?

----------------------------------------------------------------

?

= ?打印当前行号码

echo "abc\ndef\nghi\njkl" | sed -n '/def/=' ? # ?2

echo "abc\ndef\nghi\njkl" | sed -n '$='# ?4 ? <=> wc -l

?

----------------------------------------------------------------

?

q退出

echo "abc\ndef\nghi\njkl" | sed 2q# ?"abc\ndef" ?<=> head -2

echo "abc\ndef\nghi\njkl" | sed -e :a -e '$q;N;2,$D;ba' ? # ?jkl ?<=> tail -1

echo "abc\ndef\nghi\njkl" | sed '$!N;$!D'# ?"ghi\njkl" ?<=> tail -2

echo "abc\ndef\nghi\njkl" | sed '$!d'# jkl<=> tail -1

echo "abc\ndef\nghi\njkl" | sed ?-n '$p'# jkl<=> tail -1

?

?

3. meta characters

^锚定行的开始?

$锚定行的结束

.匹配一个非换行符的字符

*匹配零或多个字符 如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。

[]匹配一个指定范围内的字符

[^]匹配一个不在指定范围内的字符

\(..\)保存匹配的字符

echo "abcdefg" | sed 's/\(abc\)def/\1***/' ? # abc***g

?

&保存搜索字符用来替换其他字符

echo "abcdefg" | sed 's/d/--&--/' ? # abc--d--efg

?

\<锚定单词的开始

\>锚定单词的结束

x\{m\}字符x重复m次

x\{m,\}字符x重复至少m次

x\{m,n\}字符x重复至少m次,至多n次

?

热点排行