首页 > 其他 > 详细

老段带我学sed的笔记

时间:2014-03-14 10:41:38      阅读:428      评论:0      收藏:0      [点我收藏+]

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

老段带我学sed的笔记,布布扣,bubuko.com

老段带我学sed的笔记

原文:http://foolishfish.blog.51cto.com/3822001/1376171

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!