sed 命令介绍
- sed是贝尔实验室Lee.E.McMahon在1973年到1974年开发的流编译器;它是基于交互式行编译器ed开发的。sed也是做早支持正则表达式的工具之一。我们用sed不限于对文件的增删改查。
- sed会逐行扫描输入数据, 送到缓冲区(sed模式空间),然后操作缓冲区的数据
- 实用方式:
管道方式: 命令 | sed ‘选项’ 【匹配条件和操作指令 】
直接操作:sed ‘选项’ 【匹配条件和操作指令 】file
sed选项介绍
2.1 基础用法
-n: 屏蔽一些已有的输出,只打印sed命令筛选的输出
-i: 代表着对源文件直接操作,要慎用,一般确认指令正确后再加i; 另外这个选项i要和sed命令i作区分; sed命令中的i表示插入内容
sed -i.bak ‘2d’ /tmp/hosts: 备份再修改
-e: 指定需要执行的sed命令
sed ‘s/^ls -l /e’ : 将ls -l替换,并执行
sed 命令
多个命令用分号隔开: sed -n ‘1p;2p;$p’ /tmp.txt
a:text 在匹配数据行后面添加内容
i:在匹配数据行前插入text内容
d:表示喊出匹配整行内容text
c:text将匹配的整行替换为指定的text
r:filename 读取数据并添加,可以在r前加命令 sed ‘1r /etc/host’ /tmp.txt 读取tmp第一行放到/etc/host
w:类似,是
q:退出
s/regexp/replace/: 正则表达式匹配后,替换为replace位置的字符
\cregexpc: 正则表达式匹配,c可以是任意字符
addr1,addr2; addr1,+N:使用行号定位
!:对匹配的东西取反 sed ‘1!p’ /etc/hosts 除了第一行,都显示
g: 可以理解为表示global 全部: sed -i ‘s/h/H/g’ 替换一行中所有的h为H; 如果没有g,只替换第一个,这个g也可以是数字,表示第几个h被替换
=: 获取行号
2.2 高级用法
待续。。。
实用示例
1. 执行编译的时候,需要修改配置,完成多种模式下的自动编译
这需要修改配置中的某些参数值,通过修改后多次调用编译,即可实现; 因此此处需要用到sed进行行匹配和指定字符的替换完成参数修改
2. 常用案例
sed -i '/^$/d' /temp 删除空白行
sed -i '/^#/d' /tmp 删除'#'符号靠头的行
echo "tempfile" | sed 's#^#touch /tmp/#' 将tmpfile 替换为touch /tmp/tmpfile; '#'号作为替换符
sed -r 's/^(.)(.*)(.)$/\3\2\1/' test.txt. 将每一行倒序,注意括号是正则表达式中的保留功能,通过后面的\n 来调用前面保留的数据