a(a或者a\):在当前行后面加入一行文本
sed ''/^test/a---->this is a example2'' example
在test开头的行下,添加一行新的文本“---->this is a example2”
d 删除
D 删除模板的第一行
i 在当前行上面插入文本
h 拷贝模板块的内容到内存中的缓冲区.
H 追加模板块的内容到内存中的缓冲区
g 获得内存缓冲区的内容,并替代当前模板块中的文本.
G 获得内存缓冲区的内容,并追加到当前模板块文本的后面.
l 列表不能打印字符的清单.
n 读取下一个输入行,用下一个命令处理新的行而不是用第一个命令.
N 追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码.
p 打印模板块的行.
P(大写)
q 退出Sed.
r file:从file中读行.
t label:if分支,从一行开始,条件一旦满足或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾.
T label:错误分支,从一行开始,一旦发生错误或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾.
w file:写并追加模板块到file末尾.
W file:写并追加模板块的第一行到file末尾.
替换标记
g表示行内全面替换.
p表示打印行.
w表示把行写入一个文件.
x表示互换模板块中的文本和缓冲区中的文本.
y表示把一个字符翻译为另外的字符(但是不用于正则表达式)
元字符集
^ 锚定行的开始 如:/^sed/匹配所有以sed开头的行.
$ 锚定行的结束 如:/sed$/匹配所有以sed结尾的行.
. 匹配一个非换行符的字符 如:/s.d/匹配s后接一个任意字符,然后是d.
* 匹配零或多个字符 如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行.
[]匹配一个指定范围内的字符,如/[Ss]ed/匹配sed和Sed.
[^]匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行.
(..) 保存匹配的字符,如s/(love)able/1rs,loveable被替换成lovers.
& 保存搜索字符用来替换其他字符,如s/love/**&**/,love这成**love**.
< 锚定单词的开始,如:/<love/匹配包含以love开头的单词的行.
> 锚定单词的结束,如/love>/匹配包含以love结尾的单词的行.
x{m} 重复字符x,m次,如:/0{5}/匹配包含5个o的行.
x{m,} 重复字符x,至少m次,如:/o{5,}/匹配至少有5个o的行.
x{m,n} 重复字符x,至少m次,不多于n次,如:/o{5,10}/匹配5--10个o的行
d 删除第二行到末行:sed ''2,$d'' example
s 替换以192.168.0.1开头的行为192.168.0.1localhost:sed ''s/^192.168.0.1/&localhost/'' example
逗号 选定行范围,选定处于test和check行之间的行,并将结尾替换成sed test:sed ''/test/,/check/s/$/sed test/'' example
e 多步编辑,先删除1到5行,在替换test为check:sed -e ''1,5d'' -e ''s/test/check/'' example
r 从文件读入,注意读入的文件后面没有斜杠: sed ''/test/r file2'' example(如果example里有匹配test的行,则将读入的file2写在匹配行的下面.如果有多行匹配,则全部附加一遍)
w 写入文件 sed -n ''/test/w file3'' example(如果example里有匹配test的行,则将匹配到的行写入file3文件里.不匹配的行不写入.)
a 追加内容 sed ''/^test/a--->this is a example'' example(将内容追加到匹配的行的下一行位置)
i 插入内容 sed ''/test/inew line-------------------------'' example(将内容插入到匹配的行的上一行位置)
什么时候把这句看懂了基本上就不是sed命令菜鸟了:sed ''s/^([^:]*):(*) ([* ]*)/1:3, 2/'' < example2 > example
留下参考:
#!/bin/sh
u1=/tmp/user.$
p1=/tmp/person.$
o1=/tmp/office.$
t1=/tmp/telephone.$
trap "exit 1"
trap "rm -f $p1 $o1 $t1 $u1" exit
awk -F: ''{ print $1 ":" $5 }'' > $u1
sed -e ''s=/.*==''
-e ''s=^([^:]*):(.*) ([^ ]*)=1:3, 2='' < $u1 | sort > $p1
sed -e ''s=^([^:]*):[^/]*/(^/*)/.*$=1:2='' < $u1 | sort > $o1
sed -e ''s=^([^:]*):[^/]*/[^/]*/([^/]*)=1:2='' < $u1 |sort > $t1
join -t: $p1 $o1 |
join -t: - $t1 |
cut -d: -f 2- |
sort -t: -k1,1 -k2,2 -k3,3 |
awk -F: ''{ printf("%-39st%st%sn", $1, $2, $3) }''
|