其他分享
首页 > 其他分享> > 使用 sed 处理文本文件

使用 sed 处理文本文件

作者:互联网

前言

sed 是一款 GNU 流编辑器,可以按照指定的规则去处理文本文件或流,其强大的功能使用户在命令中快捷地修改文本文件成为可能。

它不会修改文件,除非使用shell重定向来保存结果。默认情况下,所有的输出行都被打印到屏幕上。

sed编辑器逐行处理文件(或输入),并将结果发送到屏幕。具体过程如下:

首先sed把当前正在处理的行保存在一个临时缓存区中(也称为模式空间),然后处理临时缓冲区中的行,完成后把该行发送到屏幕上。sed每处理完一行,先将处理得到的结果保存到一个暂存缓冲区中(也称为保存空间),再将其从临时缓冲区删除,然后将下一行读入,进行处理和显示。处理完输入文件的最后一行后,sed便结束运行。sed把每一行都存在临时缓冲区中,对这个副本进行编辑,所以不会修改原文件。

安装

Linux(Ubuntu) 系统已经自带,mac OS系统也默认安装,Windows 需要安装一个名为 msys2 的软件,安装过程暂略。

使用

摘要

sed [选项] [选项参数] [脚本] [输入文件] [其他参数]

基本选项及其参数

短选项 功能 对应长选项
-n 取消默认输出 --quiet, --silent
-e 脚本 添加脚本至要运行的命令 --expression=脚本
-f 脚本文件 添加脚本文件的内容到要运行的命令 --file=脚本文件
-i [后缀] 编辑已存在的文件。如果提供了后缀则生成指定后缀的备份文件 --in-place[=后缀]
-E, -r 在脚本中使用扩展的正则表达式 --regexp-extended

脚本

格式

[addr1[,addr2]][!]{命令}

地址
地址类型

注1:

命令
命令描述 命令含义
a \ text 在匹配的行后追加文本text
i \ text 在匹配的行前插入文本text
c \ text 用文本text替换匹配行或范围
d 删除匹配行或范围
p 输出匹配行或范围
s/regexp/replacement/[替换标记] 在匹配行或范围内,用 replacement 替换使用正则 regexp 匹配到的内容

注2:追加 / 插入 / 替换多行时,要在 text 内部需换行的位置用反斜杠续行。

替换标记
标记描述 标记含义
g 行内全面替换
Ng 行内从第N处匹配开始替换
\1...\9 子串匹配(?)
正则表达式元字符集

由于脚本中的命令支持正则表达式,在这就不得不提一下正则表达式的元字符集,不同的元字符在正则表达式中可以覆盖不同的匹配场景。

字符 行为描述 示例
^ 行首匹配 /^sed/匹配所有以sed开头的行
$ 行尾匹配 /sed$/匹配所有以sed结尾的行
. 非换行符单个匹配 /s.d/匹配s后接一个任意字符,最后是d
* 0至多个字符匹配 /*sed/匹配一个或多个空格后紧跟sed的行; /sed*/匹配se后紧跟0至多个d的行
[] 字符组内单个匹配 /[sS]ed/匹配sed和Sed
[^] 字符组外单个匹配 /[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行
\(..\) 匹配子串,以在之后使用 s/\(love\)able/\1rs,loveable被替换成lovers,见注3
& 匹配搜索串,以在之后使用 s/love/ **&**/,love被替换成 **love**
\< 匹配单词的开始 /\<sed/匹配包含以sed开头的单词的行
\> 匹配单词的结束 /sed\>/匹配包含以sed结尾的单词的行
x\{m\} 匹配字符x,m次 /d\{5\}/ 匹配含连续5个d的行
x\{m,\} 匹配字符x,至少m次 /d\{5,\}/ 匹配至少含连续5个d的行
x\{m,n\} 匹配字符x,至少m次,至多n次 /d\{5,9}/ 匹配含连续5到9个d的行

范例

sed '/org.greenrobot:greendao:3.3.0/s/i/\/\/i/' build.gradle
sed "s/implementation 'org.greenrobot:greendao:3.3.0'/\/\/&/" build.gradle

说明

标签:匹配,处理,命令,地址,sed,文本文件,regexp,正则表达式
来源: https://www.cnblogs.com/wx2020/p/16269905.html