文本处理大杀器——sed
来源:互联网 发布:淘宝分店怎么开 编辑:程序博客网 时间:2024/05/24 01:27
说明:本文所有案例均在linux 2.6.32-642.el6.x86_64验证成功
sed
sed是一种流编辑器,是文本处理中非常常用的工具
<——> vi :一种全屏编辑器
sed所做的处理不会改变源文件的内容
语法
sed [OPTION]…PATTERN {script}[FILE]…
sed 选项 地址编辑命令 文件
选项
-i :修改源文件;
-i.bak:修改源文件的同时生成.bak结尾的备份文件;
-n:只输出匹配到的内容到终端 #默认输出模式空间的所有行;
匹配项
地址
单地址
空地址:即对全文进行处理;
N:第n行;
/PATTERN/:被正则匹配到的行;
$:表示最后一行或者锚定行尾;
步进地址
1~2:表示奇数行;
2~2:表示偶数行;
地址对
N,M:第N行到第M行;
N,+M:第N行到下M行;
/PATTERN/,N:正则匹配到的行到第N行;
/PATTERN1/,/PATTERN2/:模式1到模式2匹配到的行;
替换及其他
s/RegExp/REPLACE/g:全局替换;
#通常和分组和后向引用结合
y/abc/xyz:转换字符,一一对应转换;
w FILE:write,保存匹配到内容到FIE
r FILE:read,将文件内容读取到指定行;
q:quit,读取到匹配行之后退出;
指令 #{ }
基础命令
=:显示行号;
n:读取下一行 #不读取本行;
d:删除模式空间的内容;
p:打印模式空间的内容;
l:输出行控制符;
高级命令
D:删除上一行到模式空间,并且继续执行指令;
P:输出上一行内容;
N:读取下一行到模式空间,用\n连接上一行;
#模式空间同时读取本行和下一行;
2大空间的交换
h/H:hold,模式空间——>保持空间,复制/追加;
g/G:get,保持空间——>模式空间,复制/追加;
x:exchange,交换模式空间和保持空间内容;
实例
实例一:
以奇数行的法二为例进行说明,/tmp/sandai文件内容为1—10,共10行
原理分析:
1. 读取第一行内容1至屏幕;
2. 执行第一条指令p,打印出1到屏幕;
3. 执行第二条指令n,读取下一行内容2到模式空间;
4. 读取第三内容重复操作1~3,至读取第10行内容10到模式空间为止;
5. 至此,打印出1、3、5、7、9到屏幕;
由上我们可以看到sed是按行匹配的呀,有兴趣的宝宝可以推推其他方法哦~
变形:检查一个文本文件中某行的长度?(sed -n np FILE | wc -c)
5
实例二:
法二:sed ‘$!d’ /tmp/sandai
- 读取下一行内容2到模式空间;
- 删除下一行内容2; #第一行执行完毕,无输出;
- 读取下一行内容3到模式空间;
- 删除下一行内容3; 第二行执行完毕,无输出;
- 重复上述操作,直至最后一行,由于无下一行,则输出10;
看了上面2个实例,你可以推理下面这个例题的原理吗?来试试吧~~~
通过上面的思考和实例,我们来总结一下sed的原理:
晓得了sed的原理,下面我们来玩玩2个案例吧,案例走起····
其实,强大的sed还有一些神奇的功能功能,我们一起来看看吧,呦吼~
sed -n '$=' /etc/fstab #显示最后一行的行号
说明:“”=“”的含义是显示行号,“”$“”表示最后一行;
一般使用 cat /etc/fstab | wc -l 来实现上述功能;
思考一下,
1.如果需要显示除空行外的所有行的行号呢?
2.如果需要在查找到的行前插入空行呢?
sed ‘/aa/{x;p;x}’ /tmp/sidai
大家可以自行尝试~~~
最后的最后,我们来思考一道题:
这道题有些许难度,我们一起来分析一下吧,如下:
思考:若将每行的字符逆向显示呢?
- 文本处理大杀器——sed
- LINUX命令文本处理——sed
- 文本处理——sed初步
- 文本处理工具sed
- 文本处理sed
- 文本处理sed
- 文本处理工具sed
- 文本处理工具sed
- 文本处理命令之 sed
- sed 处理文本的用法
- sed awk文本处理教程
- Linux 基础命令(八)—— 文本处理三剑客之sed
- 文本工具箱——“sed”篇
- 文本工具箱——“sed”篇
- 文本操作(3)——sed
- SHELL:awk,sed,常用文本处理命令
- linux文本处理工具之sed
- 文本处理之sed,awk,grep
- 动态内存
- CodeForces
- 【SpringMVC】数据类型转换以及Spring编码过滤器
- 前端学习_06.Script语法基础
- 算法进阶3-5
- 文本处理大杀器——sed
- 子线程中调用UpdateData(TRUE/FALSE)出现异常解决方法
- 浏览器工作原理(初步接触)
- 代码大全第二部分 (包含第四章)
- 欢迎使用CSDN-markdown编辑器
- printf函数的实现
- [MVVM]02-MVVMLight页面前后台消息和命令传递
- solve the version conflict of google test on ubuntu
- 893CRumor