GNU/sed的使用

以前一直觉得sed很神秘,很复杂,像找个空闲的时间的好好学一下。昨晚刚好像找点事做做,于是就看了下sed的info文档。才发现原来sed并不是那么难学的,如果熟悉regexp的话,那学起来就很简单了。
sed在处理文本的过程中,有两个空间active pattern space 和 auxiliary hold space。 一般情况下sed从输入文本读入一行放在pattern space,然后对这个space的内容执行,所有指定的命令。命令执行完后,将pattern space清空,读入下一行,再对其执行命令。这样一行一行执行,直到文件的最后一行或有q命令终止。auxiliary hold space不常用到,只有少数的几个命令会有影响,此处略。

调用如下:
$sed [option] [script] [inputfile]

终端调用GNU/sed的命令行参数有几个,但其中两个用的比较多:
  •  -i[suffix] 将命令的处理结果直接覆盖原文件,如果后面有参数,则将原文件名末尾加上suffix作为原文件的备份文件名,然后再结果覆盖原文件。
  •  -n 不加改option时,sed默认每个cycle(即sed的所有命令)执行完后,输出pattern space的内容。使用-n时则不默认输出。

地址参数
sed的命令一般可有一到两个地址参数,来控制命令的执行范围。地址参数形式:
number
例如:3p 打印第三行
first~step
例如:3~2p 从第三行开始,打印3、5、7、9...行
$
文本末行,例如:$p 打印文本末行
/regexp/或\%regexp%
如正则表达式匹配的行
/regexp/I或/%regexp%I
正则表达式匹配时,忽略大小写
/regexp/M 或 /%regexp%M
当pattern space只有一行时,M没有任何作用。当有多行时,M使得$可以同时匹配行尾和pattern space的结尾,^可以同时匹配行首和pattern space的头部。不加M时$不能匹配行尾。^不能匹配行首。

可执行的命令:
#
注释符
q [exit code]
退出sed程序
d
清空 pattern space的内容,终止当前cycle。读入下一行执行
p
打印pattern space的内容
n
删除pattern space内容,读入下一行,继续执行。
s/regexp/replacement/flags
  flags:g|number|p|w file|e|I|M
  e flag很好玩,它将pattern space的内容当作一个shell命令执行,并将执行结果替换pattern space的内容。
y/source_chars/object_chars/
  注意souce_chars和object_chars的字符个数必须相等。例如:y/a-z/A-Z/ 将小写字母替换成大写字母。
a text
c text
i text
l n
r file 
w file 
D
这个命令开始有点难以理解,它的作用是:
1、当pattern space只有一行时,删除该行,终止这个cycle。读入新的一行,重新执行。
2、当pattern space有多行时,删除第一行,不读入新的一行,重新执行这个cycle。直到pattern space的内容为空时,读入下一行执行。
N
  将pattern space的末尾添加一个换行符,并读入下一行。行号加一。
P
  打印pattern space的第一行
h
H
G
x

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值