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 hellosed -i.bak 's/old/new/g' file.txt # 修改文件,并备份原文件为file.txt.bak
bash
sed '/^$/d' file.txtbash
ls *.txt | sed 's/\.txt$/.csv/'bash
sed -n '10,20p' log.txt > excerpt.txt-i前务必先不加-i测试命令!\?、\+)。sed不会修改原文件,输出到终端。通过灵活组合这些功能,sed可以高效处理文本任务。建议通过man sed查看完整手册。