本文共 1411 字,大约阅读时间需要 4 分钟。
来自于:
工作后,需要写一些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起,直到定位符 addr2addr1,+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.
n 禁止input stream的输出。p 打印匹配行s/regexp/replacement/ 替换模式d 删除指定行= 输出行号a \ 追加内容i \ 插入内容q 匹配的第一个完成后退出r 从一个文件读内容并添加到最后R 从一个文件读取内容
echo "2014/05/03" | sed "s/\([0-9]\{4\}\).\([0-9]\{2\}\).\([0-9]\{2\}\)/\1-\2-\3/g"
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
(写的并不好,还是看文档比较好)
本文转自孤舟夜航之家博客51CTO博客,原文链接http://blog.51cto.com/cysky/1410789如需转载请自行联系原作者
cysky