sed ‘范围(条件)命令‘ 文件
命令中引用shell的变量需要加上引号,单引号括起来变量 ‘$xxx‘,或者双引号括起来整个条件范围
条件命令中的斜杠分隔符可以换成其他任意字符,用在条件范围中存在斜杠容易混淆的时候
参数
-n 关闭默认输出,结合标签p,只输出符合条件范围的行 sed ‘s/tom/TOM/p‘
-i 将修改结果回写到文件。-i.bak表示将源文件以.bak备份
d 删除
范围条件
使用数字表示行号
sed ‘3d‘ test #删除第3行
用逗号,表示行号范围
sed ‘5,10d‘ test #删除第5-10行
用波浪号~表示跨步
sed ‘1~2d‘ test #从第1行起,每2行删除1行。即,删除奇数行
用$表示最后一行
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 ‘1(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
n 在模式空间读取范围条件行的下一行
N 在模式空间将读取范围条件行追加到下一行,两行合并为一行,但两行之间仍然有\n换行符
本文出自 “foolishfish” 博客,请务必保留此出处http://foolishfish.blog.51cto.com/3822001/1376171
原文:http://foolishfish.blog.51cto.com/3822001/1376171