sed
是一个强大的文本处理工具,常用于在 Linux 脚本中对文件进行快速文本替换、删除、插入等操作。
1. 替换文本
bash复制
sed 's/old_text/new_text/g' filename
-
s
表示替换操作。 -
old_text
是要被替换的文本。 -
new_text
是替换后的文本。 -
g
表示全局替换(替换每一行中的所有匹配项)。
示例:将文件中的 "apple" 替换为 "orange"
bash复制
sed 's/apple/orange/g' fruits.txt
2. 删除行
bash复制
sed 'd' filename
-
d
表示删除操作。
示例:删除文件中的空白行
bash复制
sed '/^$/d' filename
示例:删除文件中的注释行(以 # 开头的行)
bash复制
sed '/^#/d' filename
3. 打印特定行
bash复制
sed -n '5p' filename
-
-n
表示只打印匹配的行。 -
5p
表示打印第 5 行。
示例:打印文件的第 1 到第 10 行
bash复制
sed -n '1,10p' filename
4. 在文件中插入文本
bash复制
sed '3i\new_text' filename
-
3i
表示在第 3 行之前插入文本。 -
new_text
是要插入的文本。
示例:在文件的第 5 行后插入 "Hello World"
bash复制
sed '5a\Hello World' filename
-
5a
表示在第 5 行之后追加文本。
5. 使用正则表达式匹配行
bash复制
sed '/pattern/命令' filename
示例:将所有以 "error" 开头的行替换为 "ERROR: line_number: error_message"
bash复制
sed '/^error/s/^/ERROR: /' filename
6. 多个命令
bash复制
sed -e '命令1' -e '命令2' filename
-
-e
用于指定多个命令。
示例:先删除空白行,再将 "apple" 替换为 "orange"
bash复制
sed -e '/^$/d' -e 's/apple/orange/g' filename
7. 就地修改文件
bash复制
sed -i 's/old_text/new_text/g' filename
-
-i
表示直接修改文件,而不是输出到标准输出。
注意:使用 -i
时要小心,因为它会直接修改原文件。可以使用 -i.bak
创建备份文件。
示例:替换后创建备份文件
bash复制
sed -i.bak 's/old_text/new_text/g' filename
8. 地址范围操作
bash复制
sed 'address1,address2 命令' filename
示例:将第 3 行到第 7 行中的 "foo" 替换为 "bar"
bash复制
sed '3,7s/foo/bar/g' filename
9. 多行操作
bash复制
sed ':label; N; $!b label; 命令' filename
-
:label
定义一个标签。 -
N
读取下一行并追加到模式空间。 -
$!b label
如果不是最后一行,则跳转到标签。
示例:将文件中的所有连续空行替换为一行
bash复制
sed ':a; N; $!ba; s/\n\n*/\n/g' filename
10. 结合变量使用
在脚本中,可以将 sed
命令与变量结合使用:
bash复制
old="old_text"
new="new_text"
sed "s/$old/$new/g" filename