实用linux命令-sed原创
sed命令简介
sed
(Stream Editor)是一个强大的文本处理工具,主要用于文本替换、删除、新增和选取等操作。它是一个面向行的文本处理工具,可以逐行处理文件内容而不需要打开文件。sed特别适合用于自动化脚本中进行文本转换。
sed基本语法
sed [选项] 'command' 输入文本
1
说明:
选项
控制sed的行为command
是要执行的操作输入文本
是要处理的文件或标准输入
sed常用选项
安静模式
sed -n 'command' file
1说明:
-n
选项启用安静模式,默认情况下sed会打印所有行- 使用此选项后,只有经过特殊处理的行才会被输出
直接编辑文件
sed -i 'command' file
1说明:
-i
选项直接修改文件内容,而不是输出到屏幕- 建议在使用前先备份文件
多命令执行
sed -e 'command1' -e 'command2' file
1说明:
-e
选项允许在一次调用中执行多个命令
使用命令文件
sed -f script.sed file
1说明:
-f
选项从文件中读取sed命令,适合复杂操作
使用扩展正则表达式
sed -r 'command' file
1说明:
-r
选项启用扩展正则表达式语法
sed常用命令
替换文本 (s命令)
sed 's/pattern/replacement/g' file
1说明:
s
表示替换pattern
是要查找的模式replacement
是替换的内容g
表示全局替换(一行中所有匹配)- 不加
g
只替换每行第一次匹配
删除行 (d命令)
sed '/pattern/d' file
1说明:
- 删除包含指定模式的行
- 例如:
sed '/^$/d' file
删除所有空行
追加文本 (a命令)
sed '/pattern/a 新文本' file
1说明:
- 在匹配行后追加文本
- 新文本会出现在匹配行的下一行
插入文本 (i命令)
sed '/pattern/i 新文本' file
1说明:
- 在匹配行前插入文本
- 新文本会出现在匹配行的上一行
替换整行 (c命令)
sed '/pattern/c 新文本' file
1说明:
- 用新文本替换包含指定模式的整行
打印特定行 (p命令)
sed -n '/pattern/p' file
1说明:
- 只打印匹配指定模式的行
- 通常与
-n
选项一起使用
sed高级用法
使用行号
sed '1,5d' file # 删除1-5行 sed '3,7s/old/new/g' file # 只替换3-7行
1
2说明:
- 可以使用行号指定操作范围
$
表示最后一行,如5,$d
删除第5行到最后
使用正则表达式
sed '/^#/d' file # 删除所有注释行(以#开头) sed '/start/,/end/d' file # 删除从start到end之间的所有行
1
2说明:
- 可以使用正则表达式匹配模式
- 可以指定范围模式
保留备份
sed -i.bak 's/old/new/g' file
1说明:
-i.bak
会在修改文件的同时创建一个后缀为.bak的备份文件
多个替换操作
sed 's/old1/new1/g; s/old2/new2/g' file
1说明:
- 使用分号分隔多个命令
- 也可以使用
-e
选项:sed -e 's/old1/new1/g' -e 's/old2/new2/g' file
使用&引用匹配文本
sed 's/hello/&, world/g' file # hello 替换为 hello, world
1说明:
&
代表匹配的文本本身
使用捕获组
sed -r 's/(foo)-(bar)/\2-\1/g' file # foo-bar 替换为 bar-foo
1说明:
- 使用
\1
,\2
等引用捕获的组
- 使用
实用sed示例
替换带有关键字的整行
# 替换前先显示出来看一下 sed -n '/mykeywords/c xxxxxxxxxxxxxx' `grep -rl 'mykeywords'` # -i直接替换 sed -i '/mykeywords/c xxxxxxxxxxxxxx' `grep -rl 'mykeywords'`
1
2
3
4
5说明:
- 结合
grep -r
查找包含关键字的文件 - 使用
c
命令替换整行内容
- 结合
删除文件中的空行
sed -i '/^$/d' file
1说明:
^$
匹配空行(行首紧跟行尾)
在文件的每行前添加内容
sed 's/^/添加的前缀/' file
1说明:
^
匹配行首,在行首添加文本
在文件的每行后添加内容
sed 's/$/添加的后缀/' file
1说明:
$
匹配行尾,在行尾添加文本
只显示指定行范围
sed -n '10,20p' file # 只显示10-20行
1说明:
- 结合
-n
和p
命令,只打印指定范围的行
- 结合
多个文件批量替换
sed -i 's/old/new/g' file1 file2 file3
1说明:
- sed可以同时处理多个文件
sed与其他工具的配合
与grep结合
grep "pattern" file | sed 's/foo/bar/g'
1说明:
- 先用grep过滤出包含特定模式的行
- 然后用sed进行处理
与awk结合
sed 's/pattern/replacement/g' file | awk '{print $1}'
1说明:
- sed处理后的输出可以传递给awk进一步处理
在shell脚本中使用
for file in *.txt; do sed -i 's/old/new/g' "$file" done
1
2
3说明:
- 在循环中批量处理多个文件
sed注意事项
转义字符
- 在模式中使用特殊字符(如
/
,.
,*
等)需要转义 - 例如:
sed 's/\/path\/to\/file/\/new\/path/g' file
- 在模式中使用特殊字符(如
不同分隔符
- 可以使用不同的分隔符来避免大量转义
- 例如:
sed 's#/path/to/file#/new/path#g' file
大文件处理
- sed是逐行处理的,对大文件也很高效
- 但大量复杂的替换操作可能会影响性能
备份重要文件
- 使用
-i
选项修改文件前,建议先备份 - 或使用
-i.bak
自动创建备份
- 使用
上次更新: 4/24/2025