重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
sed简介:流编辑工具,用来对文本进行过滤与替换操作。
成都创新互联专注于芜湖县企业网站建设,成都响应式网站建设公司,购物商城网站建设。芜湖县网站建设公司,为芜湖县等地区提供建站服务。全流程按需定制开发,专业设计,全程项目跟踪,成都创新互联专业和态度为您提供的服务
sed流程:sed通过一次仅读取一行内容来对某些指令进行处理后输出。
1、sed通过文件或管道读取文件内容,但sed默认并不直接修改源文件,而是将读入的内容复制到缓冲区中,称之为模式空间。
2、所有的指令操作都是在模式空间找那个进行
3、sed根据相应的指令对模式空间中的内容进行处理并输出结果,默认输出至标准输出(即屏幕上)。
sed基本语法格式:
用法:sed[选项]...{脚本指令}[输入文件]...
选项: -version 显示sed版本
-help :显示帮助文档
-n,-quiet,-silent静默输出,默认情况下,sed程序在所有的脚本指令执行完毕后,将自动打印模式空间中的内容。
-e script允许多个脚本指令被执行
-f script-file从文件中读取脚本指令,对编写自动化脚本程序很实用
-i ,-in-place 该选项直接修改源文件
-l N 该选项指定l指令可以输出的行长度,l指令为输出非打印字符。
-posix 禁用GNU sed扩展功能。
-r 在脚本指令中使用扩展正则表达式。
-s,-separate 默认情况下,sed将把输入的多个文件名作为一个长的连续的输入流。而GNU sed则允许把它们当作单独的文件。
-u,-unbuffered 最低限度的缓存输入与输出
a,append表示追加指令;
i,insert表示插入指令;
d,delete表示删除指令;
s,substitution表示替换指令。
sed脚本指令的基本格式是:
[地址,即路径]命令(有些命令仅可以对一行操作,有些可以对多行操作),命令也可以用花括号进行组合,使命令序列可以作用于同一个地址。
address{
command1
command2
command3
}
sed的基本工作方式是:
sed的替换命令s:
1、全局替换 : s/old/new/g ,其中g为全局替换,用于替换所有出现的次数; /如果和正则匹配的内容冲突可以使用其他符号,如 : s@old@new@g
2、标志位
为什么要有多行模式: 配置文件一般有单行出现,但也有使用json或XML格式的配置文件,为多行出现。
多行模式处理命令N、D、P
一、基本正则列表与扩展正则
二、sed 文本处理工具的用法介绍
三、认识sed工具的 n、r、i 选项指令
四、认识sed工具的 p、d、s 条件指令
五、认识sed工具的 i、a、c 条件指令
六、认识sed高级应用 r、w 条件指令
七、综合案例
Linux sed
Stream EDitor,流式编辑器
一、基本正则列表与扩展正则
根据推出时间的不同,分为基本正则和扩展正则,扩展正则在基本正则的基础上做了一些优化和新增了一些正则表达符号,因为一些命令没有及时更新,所以你可能会遇到有些命令只支持基本正则,不支持扩展正则,或者需要添加一些支持扩展正则的选项。
关于正则与扩展正则区别的详细介绍可以看我另一篇shell 正则的介绍
基本正则列表
扩展正则列表
二、sed 文本处理工具的用法介绍:
相关说明如下:
sed命令的常用选项如下:
sed命令常用条件指令如下
三、认识sed工具的 n、r、i 选项指令
# sed [选项] '条件指令' 文件.. ..
上面的条件指令 我们可以拆分为 # sed [选项] '范围界定+操作指令' 文件.. .. 的格式这样更容易理解
sed命令可以使用行号或正则做为条件匹配:
1)sed命令的 -n 选项
执行p打印等过滤操作时,希望看到的是符合条件的文本。但不使用任何选项时,默认会将原始文本一并输出,从而干扰过滤效果。比如,尝试用sed输出/etc/hosts的第1行:
可以发现所有的行都被显示出来了(第1行重复2次)。—— 正确的用法应该添加 -n 选项,这样就可以只显示第1行了:
行号可以是连续的行号,如打印passwd第3到第6行账户的信息:
2)sed命令的 -r 选项
需要用到扩展正则时,需要加 -r选项
3)sed命令的 -i 选项
正常情况下,sed命令所做的处理只是把操作结果(包括打印、删除等)输出到当前终端屏幕,而并不会对原始文件做任何更改:
若希望直接修改文件内容,应添加选项 -i 。
需要特别注意的是,和一些指令组合和使用的先后顺序都会对最终输出结果产生影响
例如: 指令 -n、和操作操作p
比如,直接删除test.txt(自行创建一个任意内容的文件)的第1~4行:
下文中关于使用sed修改文件的示例中,为了避免大家在练习过程中因误操作导致系统故障,命令省略 –i 选项,不再逐一说明。需要时,大家可自行加上此选项。
4)多个指令可以使用分号隔离
用分号来隔离多个操作,比如:
1)行号案例
2)正则案例
3)没有条件,则表示匹配所有行
四、认识sed工具的 p、d、s 条件指令
1)下面看看sed工具的p指令案例集锦(自己提前生成一个a.txt文件)
2)下面看看sed工具的d指令案例集锦(自己提前生成一个a.txt文件)
3)sed命令的s替换基本功能(s/旧内容/新内容/选项):
4)下面看看sed工具的s指令案例集锦(自己提前生成一个a.txt文件)
注意:替换操作的分隔“/”可改用其他字符,如#、等,便于修改文件路径
以下操作使用nssw.txt作为测试文件。
参考数据文件内容如下:
5)删除文件中每行的第二个、最后一个字符
分两次替换操作,第一次替换掉第2个字符,第二次替换掉最后一个字符:
6)将文件中每行的第一个、倒数第1个字符互换
每行文本拆分为“第1个字符”、“中间的所有字符”、“倒数第1个字符”三个部分,然后通过替换操作重排顺序为“3-2-1”:
7)删除文件中所有的数字
因原文件内没有数字,行首也没有空格,这里在内容中新增一些数字另外新几行内容 首行添加几行空格,生成一个新测试文件以 nssw2.txt
以nssw2.txt文件为例,删除所有数字、行首空格的操作如下:
8)为文件中每个大写字母添加括号[]
使用“()”可实现保留功能,所以可参考下列操作解决:
五、认识sed工具的 i、a、c 条件指令
# sed [选项] '条件指令' 文件..
sed工具的多行文本处理操作:
基本语法格式案例:
1)sed命令的 i 指定行之前插入基本功能
2)sed命令的a追加基本功能
3)sed命令的c替换基本功能
六、认识sed高级应用 r、w 条件指令
1)sed命令的 r 读取文件
2)sed命令的 w 保存到文件
七、综合案例
1) 综合案例1
2)综合案例2 脚本应用
1. sed -i 's/CANCEL_TIME/CANCEL_RECV_TIME/g' csv2drds-TF_B_PAYLOG_D.json
---指定文件替换,将文件中的CANCEL_TIME替换成CANCEL_RECV_TIME;
2. sed -i 's/CANCEL_TIME/CANCEL_RECV_TIME/g' `grep CANCEL_TIME -rl ./*TF_B_PAYLOG_D*.json`
---批量文件替换,递归查找含CANCEL_TIME的文件,将所有文件中的CANCEL_TIME替换成CANCEL_RECV_TIME;
3. sed -i 's/\/tmp\/ditagent\/TF_B_PAYLOG_D.csv/\/vdata\/datapre\/281\/'"$filename"'/g' $jsonname
---带/的字符串替换,将/tmp/ditagent/TF_B_PAYLOG_D.csv替换成/vdata/datapre/281/'"$filename"'
4. sed -i 's/^/beginstring/g' *.txt
---在所有行首添加字符串;
5. sed -i 's/$/endstring/g' *.txt
---在所有行末添加字符串
6. sed -i '2s/原字符串/替换字符串/g' *.txt
---替换第2行
7. sed -i '$s/原字符串/替换字符串/g' *.txt
---替换最后一行
8. sed -i '2,5s/原字符串/替换字符串/g' *.txt
---替换2到5行
9. sed -i '2,$s/原字符串/替换字符串/g' *.txt
---替换2到最后一行
10. sed 's/\x80/|/g' test.dat |iconv -f gbk -t utf-8 testutf8.dat
---把test.dat中的欧元符号替换成竖线,再将文件gbk格式转成utf8
-i选项是直接在文件中替换,不在终端输出;
-r选项是所给的path中的目录递归查找;
-l选项是输出所有匹配到oldstring的文件;
s/表示替换
/g表示全局替换