sed是英语词组Stream Editor的缩写为流编辑器

流编辑器的原理:
sed 的核心原理:逐行读取数据流 → 载入内存模式空间 → 按脚本指令处理 → 输出 / 丢弃 → 清空空间循环,全程不加载整个文件,默认不修改原始文件。

常用的六个脚本
|
全局替换字符串(预览,不改原文件) |
sed 's/旧内容/新内容/g' 文件名 |
s=替换指令;g=全局匹配,替换所有命中内容 |
仅在模式空间替换,默认输出,原文件只读不修改 |
|
全局替换并直接修改原文件(就地编辑) |
sed -i 's/旧内容/新内容/g' 文件名 |
-i=就地修改,后台生成临时文件替换原文件 |
关闭直接输出,写入临时文件,处理完成后替换源文件 |
|
删除包含指定关键词的行 |
sed '/关键词/d' 文件名 |
d=删除指令,匹配即删除 |
匹配行后清空模式空间,跳过默认输出,直接处理下一行 |
|
仅打印包含指定关键词的行(筛选文本) |
sed -n '/关键词/p' 文件名 |
-n=关闭默认自动输出;p=强制打印 |
屏蔽默认输出,仅匹配成功的行执行打印,其余行丢弃 |
|
删除指定行号/连续行 |
sed '行号d' 文件名 sed '起始行,结束行d' 文件名 |
数字=指定行号,逗号=行范围 |
按行读取时判断行号,命中则执行删除,不修改其他行内容 |
|
指定行前/后插入新文本 |
行后追加:sed '行号a 新增内容' 文件名 行前插入:sed '行号i 新增内容' 文件名 |
a=行后追加;i=行前插入 |
在模式空间内拼接文本,输出时携带新增内容,流式插入 |
行前插入:sed ‘行号i 新增内容' 文件名
- sed -e '1i\\a new line' test1.txt

新增一个备份文件 并修改文件
- sed -ie 'li\\a new line' test1.txt

不新增一个备份文件 并修改文件
- sed -ie 'li\\a new line' test1.txt

行后追加:sed '行号a 新增内容' 文件名
- sed -e '4a\\line' test1.txt

删除包含指定关键词的行
- sed -e '1d' test1.txt

覆盖
- sed -e '1c\\line' test1.txt

局部替换
- sed -e '1s/new/old/' test1.txt

有多个时要用正则表达式/g表明全局替换
- sed -e '1s/new/old/g' test1.txt

p=强制打印
- sed -e '1p' test1.txt

仅打印包含指定关键词的行(筛选文本)sed -n '/关键词/p' 文件名
- sed -n '1p' test1.txt

多个脚本可加多个-e
- sed -ne '1p' -e '2p' test1.txt

大量脚本可用-f使用脚本文件
- sed -f test.sh test1.txt



