sed用法总结

每次都要google怎么用sed,因为本人实在记不住那些符号的意思。索性总结一下一些用法,节省搜索时间。

1.  什么是sed
    sed是一种改进的,非交互式的编辑器。用户可以用命令实现vi的所有编辑功能。sed不会改变文件内容,
而是把结果输出到屏幕。

2.   sed和正则表达式
    和grep一样,sed也支持正则表示式。grep所支持的metacharacter,sed均支持。

3.  一些重要的command
    (1) p: 输出命令。 比如sed '/love/p' 将输出全部的文本,并且符合love的行将被输出2次数。


    (2) n: 抑制sed的默认行为,比如上例中,就是因为sed默认输出行, 而命令p又输出行。sed -n '/love/p' 将输出包含love的所有行而没有重复。


    (3) d: 删除命令。 删除某行,比如sed '3d' 删除第三行并默认输出其它行。
           sed '3,$d' 删除3行至末行内容,','表示范围。


    (4) s: 替换命令。 替换字符串, 比如sed 's/love/hate/g' filename > filename.back. 将替换filename文件中的
            love字串为hate。
           又如:sed 's/[0–9][0–9]$/&.5/' datafile 在文件中查找以2为数字结尾的行,并在这2位数字后面.5,&表示正则表达式所匹配出的串。
           又如:sed 's#3#88#g' datafile 任何在s后面的符号都被视作替代'/'而成为新的分界符。


    (5) ,: 确定选择范围。比如:sed -n '/west/,/east/p' datafile 在文件中首先匹配west, 匹配到就开始输出行直至匹配到east为止,注意正则表达式可以是数字(标志行),可以是 字符组合,也可以是混合。sed -n '/west/, /&/p' datafile 首先匹配west,输出行,直到最后一行为止。
    
    (6) -e: 编辑命令:用于连接多个sed编辑命令
            比如说:sed -e '1,3d' -e 's/love/gloom/g' datafile :首先删除1至3行,然后全文替换love为gloom。
            但有一点需要注意:前一个命令的输出会影响后一个命令。他们是顺序执行的。
            
    (7) r: 读文件命令:允许sed加载特定文件的内容到当前行的下一行。
           比如说:sed '/Susan/r tmpfile' currentfile: 在currentfile中匹配Susan,一旦匹配上,则在下一行
           加载tmpfile的内容,如果Susan在currentfile中出现多次,则tmpfile将被加载多次。
           
    (8) w: 写文件命令:允许sed将匹配出的行写到新文件中
           比如说:sed -n '/north/w tmpfile' currentfile:在currentfile中匹配north,一旦匹配到就吧
           所在行写到tmpfile中。
    
    (9) a: 行追加命令:追加一行信息到当前行的下一行。在TC shell中,必须有个\在a之后,第一个a是sed所要求的,表示命令尚未结束,转下一行。 所替换的文本必须单独放在一行。比如: sed '/^love /a\Hello World!' datafile 在datafile中匹配以love 开头的行,并在此行后面加入一行文本Hello World!
                       
    (10) i: 行插入命令:如上,但不同的是在匹配行之前插入一行新文本。


    (11) c: 行替换命令:如上,但不同的是用一行新文本替换匹配出的行。
    
    (12) n: 读取下一行:读取匹配行的下一行,并进行处理。
            sed '/^love /{n; s/is/was/;}' datafile: 搜索datafile,匹配出以love 开头的行,读取匹配行的下一行
            并用新的sed命令 s/is/was 处理,直到最后一行。


    (13) y: 转换命令:定义字符转换的映射关系,并根据映射关系一一进行转换。
            比如:sed '1,5y/abcdefg/ABCDEFG/' datafile:根据给定的映射关系,将1-5行的a,b,c,d,e,f,g字母转化为大写。
            
    (14) q: 退出命令:通知sed停止处理行,并退出。
            比如:sed '5q' datafile: sed 默认输出前5行,随之退出。
            又比如:sed '/Lewis/{s/Lewis/Joseph/;q;}' datafile: 首先匹配出Lewis,而后替换Lewis为Joseph,并立刻退出。
    
    (15) h & g: 存储和提取命令: sed运行时,会维护一个额外的holding buffer用于存储行,h命令将pattern buffer中的内容 赋值到holding buffer中,g命令则从holding buffer中提取行并处理。比如:sed -e '/love/h' -e '$g' datafile: 在datafile中搜索love, 将匹配行存储到holding buffer中,处理到最后一行时,从holding buffer中读取行数据,并默认输出。


    (16) h & x: 存储和替换命令:h功能如上,x将用holding buffer中的行数据替代当前正在处理的行(pattern buffer中的数据)。
    
3.  sed脚本
    可以将一系列的sed命令写在一个脚本文件中,运行时用命令 sed -f shellfile datafile,则sed会顺序读取datafile中的
    每一行,并用shellfile中的命令处理这一行,直到datafile中的所有行都被处理完成。
    需要注意的是:在每个命令后面不能有空格,否则会报错。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值