sed
(stream editor)是 Linux 中强大的文本处理工具之一,用于以流的方式对文本进行处理。它可以执行替换、删除、插入、新增等操作,常用于批量文本编辑、自动化脚本、日志处理等场景。
sed [选项] 'script' [文件...]
script
:对文本执行的命令脚本,如 s/旧/新/
表示替换;文件
:要处理的目标文件;[选项]
:控制输出行为的参数。将文本 apple
替换为 orange
:
sed 's/apple/orange/' fruits.txt
sed '/^$/d' data.txt
ps aux | sed -n '1,5p'
显示前 5 行进程信息。
选项 | 说明 |
---|---|
-n |
静默模式,不自动打印处理结果 |
-e |
多条 sed 命令时使用 |
-i |
直接修改文件内容(原地修改) |
-r |
启用扩展正则表达式(GNU sed 支持) |
s/pattern/replace/
:替换d
:删除p
:打印a
:追加i
:插入c
:替换整行sed 's/dog/cat/' animals.txt
将每行中第一个 dog
替换为 cat
。
sed 's/dog/cat/g' animals.txt
sed -n '2,4p' file.txt
输出:
Line 2 content
Line 3 content
Line 4 content
说明:-n
关闭默认输出,只打印指定行。
sed '/DEBUG/d' logfile.log
解释:所有包含 DEBUG
的日志行都会被删除。
sed -i 's/http:/https:/g' index.html
将所有 http:
替换为 https:
,并直接修改文件。
sed 's/$/ # processed/' script.sh
使用 -e
运行多个操作:
sed -e 's/foo/bar/g' -e '/^#/d' config.conf
说明:先替换所有 foo
为 bar
,再删除注释行。
只替换第 3 行:
sed '3s/old/new/' file.txt
在匹配行之后插入文本:
sed '/pattern/a inserted line' file.txt
在之前插入:
sed '/pattern/i inserted line' file.txt
sed -r 's/[0-9]+/NUM/' numbers.txt
说明:替换所有数字为 NUM
,+
仅在 -r
模式中生效。
sed
修改文件失败,内容没有变?原因:未使用 -i
选项
解决:
sed -i 's/old/new/g' file.txt
解决:使用双引号将命令包裹:
word="apple"
sed "s/$word/orange/g" file.txt
解决:结合 awk
处理结构化数据更合适;sed
适合按行和模式处理。
-i
?解决:macOS 要加空字符串:
sed -i '' 's/foo/bar/g' file.txt
-i
修改原始文件grep
、awk
、sort
)可极大增强处理能力-n
和 p
控制输出,提高效率并防止信息冗余sed
是 Linux 文本处理世界里的“瑞士军刀”,掌握它,你可以优雅地应对各种自动化文本处理任务!