sed 学习笔记

来自于:http://tiankonguse.com/record/record.php?id=638

 

前言

工作后,需要写一些shell来处理数据,于是接触到了sed.

当时我主要使用sed的正则表达式来处理数据的,p挑出对应的数据了。

现在回过头来完整的学习一下sed。

正文

sed 是一个 stream 处理器,可以实现过滤和替换功能。

sed 只能处理 input stream(一个文件或者管道传来的 stream)

sed 是一个非交互性的文本编辑器。

sed 一般通过行号和正则表达式完整制定的操作。

sed 的输出默认是显示在屏幕上,一般使用重定向保存输出。

基本语法
sed [option] sed命令 输入文件
sed [option] -f sed脚本文件 输入文件
定位命令
number number为一个行号
first~step 从first行开始,每次递增step行。
$ 最后一行
/regexp/ 匹配正则表达式的行
\cregexpc 匹配正则表达式的行,c可以是任何字符
first, addr2 从first起,直到定位符 addr2
addr1,+N Will match addr1 and the N lines following addr1.
addr1,~N Will match addr1 and the lines following addr1  until  the  next line whose input line number is a multiple of N.
option 介绍
n 禁止input stream的输出。
p 打印匹配行
s/regexp/replacement/ 替换模式
d 删除指定行
= 输出行号
a \  追加内容
i \  插入内容
q 匹配的第一个完成后退出
r 从一个文件读内容并添加到最后
R 从一个文件读取内容
样例

关于正则表达式需要提示几点 
1.直接写的"(){}+"为普通的字符,加了反斜杠才是正则表达式里的相应字符 
2.匹配项使用 \number 得到,number从1开始 
把所有样式为年/月/日的时间换成 年-月-日
echo "2014/05/03" | sed "s/\([0-9]\{4\}\).\([0-9]\{2\}\).\([0-9]\{2\}\)/\1-\2-\3/g"

分析: ([0-9]{4}) 代表得到四个数字,在 sed 中就变成 [0?9]{4} 了。
echo "2014/05/03" | sed "s/\([0-9]\+\).\([0-9]\+\).\([0-9]\+\)/\1-\2-\3/g"

分析: 使用确切的数字过于严格,所以换成 + 号,代表至少一个。
cat input | sed -n '1p'  #输出第一行
cat input | sed -n '$='  #输出最后一行行号
cat input | sed -n '/3/'p #打印含有3的行
cat input | sed -n '1~2'p #打印奇数行
cat input | sed    '2,2'd #删除偶数行
cat input | sed   '5,7 s/^/\t/' #5至7行缩进

参考资料

man sed

http://blog.csdn.net/yuanfen127/article/details/640060 (写的并不好,还是看文档比较好)

本文转自孤舟夜航之家博客51CTO博客,原文链接http://blog.51cto.com/cysky/1410789如需转载请自行联系原作者


cysky

上一篇:[转载]VS2008 的计算代码度量值


下一篇:STP学习笔记