1. sed(stream editor), 流编辑器
Linux 中, 主要中 sed 命令实现对文件的增删改替换查
名称
sed - 用于过滤和转换文本的流编辑器
SYNOPSIS
sed [选项]... {script-only-if-no-other-script} [文件]...
常用选项或命令
-i 正式执行操作修改内容
-n 取消默认输出
-e 允许多项编辑
-r 使用扩展正则表达式
= 在文件内容行前增加一行行号
s 查找并替换
g 全局范围
p 打印输出
'/ /p' 正则表达式匹配 / / 里面的内容并输出
'2s///g' 2 指代第二行
's#()()#\1\2#g' 分配处理,\1 指代第 1 个 () 内的内容
's#()()#mv & doubi#g' 分配处理,\1 指代第 1 个 () 内的内容,& 指代 ## 里面查找到的所有内容
2. sed 的简单增删查改
- # 把 passwd 文件复制到当前用户家目录
- cp /etc/passwd ~/
- cd
- # 增
- # 22 行前插入
- sed -i '22 i 佛祖派来的逗比' passwd
- # 22 行后添加
- sed -i '22 a 佛祖派来的逗比' passwd
- # 匹配 postfix 行, 在行前插入
- sed -i '/postfix/ iemail' passwd
- # 删
- sed -i '22d' passwd
- sed -i '/ 佛祖派来的逗比 / d' passwd
- # 查,-n 取消默认输出, 即只输出匹配到的内容
- sed -n '/root/p' passwd
- sed -n '22p' passwd
- # 替换
- # 替换匹配到的第一个 root 为 Caiyun
- sed -i 's#root#Caiyun#' passwd
- # 替换所有 root 为 Caiyun
- sed -i 's#root#Caiyun#g' passwd
3. 扩展实例
- # 取 ip 地址
- ifconfig eth0|sed -nr '2s/^.*ddr:(.*) B.*$/\1/gp'
- # 转换列输出
- sed -r 's#([^:]+)(:.*:)(/.*$)#\3\2\1#g' passwd
- # 优化 sshd 服务
- sed '13a Port 52004\nPermitRootLogin no\nPermitEmptyPasswords no\nUseDNS no\nGSSAPIAuthentication no' sshd_config
- # 打印文件内容不包含 root 用户行
- sed '/root:x/d' passwd
- # 指定行修改文件内容
- sed '28s/dudu/DUDU/g' passwd
- # 优化开机自启动服务
- chkconfig --list|grep "3:on"|egrep -v "crond|network|rsyslog|sshd|sysstat" |awk '{print"chkconfig",$1,"off"}'|bash
- # 批量更改文件名
- ls rename/|sed -r 's/(^stu.*)_fin.*$/\1.png/g'
- ls|sed 's/\(^stu.*\)_fin.*$/mv & \1.png/g'|bash
- rename "_finished" "" stu*
来源: http://www.bubuko.com/infodetail-2931346.html