sed
(Stream Editor)是Linux中强大的文本处理工具,主要用于对文本进行查找、替换、删除、插入等操作。以下是sed
的详细使用指南:
sed [选项] '命令' 文件名
选项 | 作用 |
---|---|
-n |
仅显示处理后的行(抑制默认输出) |
-i |
直接修改文件内容(慎用!建议先不加-i 测试) |
-e |
指定多个命令(如 sed -e 'cmd1' -e 'cmd2' ) |
-r |
启用扩展正则表达式(类似grep -E ) |
sed 's/旧内容/新内容/[flags]' 文件名
g
:全局替换(默认每行只替换第一个匹配)数字
:替换第N个匹配(如s/old/new/2
替换第二个)p
:打印替换成功的行(常与-n
联用)i
:忽略大小写(需结合-r
或sed -i 's/old/new/i'
)示例:
sed 's/foo/bar/g' file.txt # 替换所有foo为bar
sed -i 's/hello/world/2' file # 替换每行第二个hello为world
sed 'Nd' 文件名 # 删除第N行
sed 'M,Nd' 文件名 # 删除M到N行
sed '/pattern/d' 文件名 # 删除匹配pattern的行
示例:
sed '3d' file.txt # 删除第3行
sed '2,5d' file.txt # 删除2-5行
sed '/error/d' file.txt # 删除含"error"的行
sed 'i\插入内容' 文件名 # 在每行前插入
sed 'a\追加内容' 文件名 # 在每行后追加
sed '3i\插入内容' 文件名 # 在第3行前插入
示例:
sed '2i\### Start ###' file.txt # 在第2行前插入注释
sed -n 'Np' 文件名 # 打印第N行
sed -n '/pattern/p' 文件名 # 打印匹配的行
sed -n 'M,Np' 文件名 # 打印M到N行
示例:
sed -n '5p' file.txt # 打印第5行
sed -n '/error/p' log.txt # 打印含"error"的行
sed -e 's/foo/bar/' -e '/baz/d' file.txt # 先替换后删除
^
:行首(sed 's/^#//'
删除行首的#
)$
:行尾(sed 's/old$/new/'
替换行尾的old).*
:任意字符(sed 's/f.*o/bar/'
)&
引用匹配内容:
bash
echo "123" | sed 's/[0-9]/[&]/g' # 输出: [1][2][3]
-r
):
bash
echo "hello world" | sed -r 's/(hello) (world)/\2 \1/' # 输出: world hello
sed -i.bak 's/old/new/g' file.txt # 修改文件,并备份原文件为file.txt.bak
bash
sed '/^$/d' file.txt
bash
ls *.txt | sed 's/\.txt$/.csv/'
bash
sed -n '10,20p' log.txt > excerpt.txt
-i
前务必先不加-i
测试命令!\?
、\+
)。sed
不会修改原文件,输出到终端。通过灵活组合这些功能,sed
可以高效处理文本任务。建议通过man sed
查看完整手册。