课程地址:http://edu.51cto.com/course/course_id-1108.html
html
sed '范围(条件)命令' 文件正则表达式
命令中引用shell的变量须要加上引号,单引号括起来变量 '$xxx',或者双引号括起来整个条件范围
条件命令中的斜杠分隔符能够换成其余任意字符,用在条件范围中存在斜杠容易混淆的时候shell
参数bash
-n 关闭默认输出,结合标签p,只输出符合条件范围的行 sed 's/tom/TOM/p'
-i 将修改结果回写到文件。-i.bak表示将源文件以.bak备份ide
d 删除
范围条件3d
使用数字表示行号htm
sed '3d' test #删除第3行
用逗号,表示行号范围blog
sed '5,10d' test #删除第5-10行
用波浪号~表示跨步get
sed '1~2d' test #从第1行起,每2行删除1行。即,删除奇数行
用$表示最后一行it
sed '$d' test #删除最后一行
正则表达式(用//括起来,可替换使用其余字符)
sed '/^student/d' test #删除student开头的行 sed '/\bstudent\b/d' test #删除包含student单词的行
s 替换 's/old/new/标签'
old部分能够使用正则表达式,new部分不能够使用正则表达式
sed 's/tom/TOM/2' #将每行第2个出现的tom替换为大写TOM
标签g 对一行中全部符合条件的字符都执行操做
标签p 输出符合条件范围的行,未关闭默认输出的状况下,符合条件的行将输出两次
用分号;使sed一次性执行多个操做
sed 's/tom/TOM/g; s/aaa/AAA/g' test #将test中tom替换为TOM,接着在此基础上,将aaa替换为AAA
如下是另外一个例子,先将输出结果的连续逗号替换成单个,而后将逗号替换成制表符
new部分能够使用的参数:
& 表示old的值
\U 把\U后面的全部字符更换为大写
sed 's/\[.*\]/\U&/' test #将test中[]内字符改成大写
\u 把\u后面的第一个字符更换为大写
\L 把\L后面的全部字符更换为小写
\l 把\u后面的第一个字符更换为小写
\E 终止\U\L的转换
\1 \2 引用old部分的分组内容,old部分的分组以()分隔,()须要\转义(sed -r 能够不用转义\引用括号)。数字表示第几个分组
sed -n 's/#\(Server\)\(Name\)/\2/p' test #输出结果将#ServerName替换为Name
i 在条件范围行的上一行插入 sed '1atest' file #在file第1行后面追加test行
a 在条件范围行的下一行插入
c 将知足某个条件的行替换(整行替换)
sed '/ONBOOT/c ONBOOT=yes/' ifcfg-eth0
y 替换 y/abc/XYZ/
n 在模式空间读取范围条件行的下一行
N 在模式空间将读取范围条件行追加到下一行,两行合并为一行,但两行之间仍然有\n换行符
-------------------------------------
rhce rhce rh
ce rhce rhce
sed 'N:s/rhce/RHCA/g' test
-------------------------------------
保持空间
x 保持空间和模式空间内容互换
h 把模式空间的内容拷贝到保持空间(覆盖)
H 把模式空间的内容拷贝到保持空间(追加)
g 把保持空间的内容写入到模式空间(覆盖)
G 把保持空间的内容写入到模式空间(追加)
-------------------------------------
tom
jingli
bob
zongjian
mary
jingli
jerry
zongjian
sed -n -e '/jingli/!h' -e '/jingli/{x;p}' test
显示jingli的上一行内容
sed -n -e '/jingli/!h' -e '/jingli/{H;x;s/\n/:/;p}' test
将jingli追加到上一行末尾,以冒号:分隔
sed -n 'h;n;G;p' test
奇数行和偶数行互换
-------------------------------------
sed 标签 功能,实现循环。格式以下sed ':标签 范围1 命令1; /模式/b'sed ':label s/rhce/RHCA/; /rhce/b label' test替换rhce为RHCA,以后检测是否存在rhce,知足条件执行标签跳转。