sed命令语法详解
sed(stream editor)是一个非常强大的文本处理工具,用于对文本进行查找、替换、插入、删除等操作。它通常用于批量处理和自动化脚本中。
1. sed 命令的基本语法
sed [options] 'command' file
options:sed命令的选项,例如-i用于直接修改文件,-e用于执行多个命令等。command:sed执行的操作,如查找和替换、删除等。file:要处理的文件。如果没有指定文件,sed将从标准输入(通常是键盘)读取数据。
2. 常用的 sed 命令格式
sed 命令的核心格式是:
sed 'operation/pattern/replace' filename
其中:
operation:指定要执行的操作,常见操作有替换(s)、删除(d)等。pattern:查找的模式,可以是一个正则表达式。replace:替换内容(仅适用于替换操作)。
3. 常见 sed 命令详解
3.1 查找和替换(s 命令)
sed 最常用的功能之一是替换文本,使用 s 命令(substitute)进行查找和替换。
sed 's/old_pattern/new_pattern/' filename
old_pattern:要查找的内容(可以是正则表达式)。new_pattern:替换成的内容。filename:要处理的文件。
例子:
sed 's/hello/world/' file.txt
此命令会将 file.txt 中的第一个 hello 替换为 world。
常用选项:
g:全局替换。默认情况下,s只会替换每一行的第一个匹配项。加上g之后会替换行内所有匹配项。sed 's/hello/world/g' file.txti:忽略大小写进行匹配。sed 's/hello/world/i' file.txtn:显示替换后的结果(而不是默认的输出)。sed -n 's/hello/world/p' file.txt
3.2 删除行(d 命令)
删除特定行或符合条件的行。
sed 'line_numberd' filename
line_number:行号,指定要删除的行。pattern:符合特定模式的行。
例子:
- 删除第 3 行:
sed '3d' file.txt - 删除所有包含
pattern的行:sed '/pattern/d' file.txt
3.3 替换并修改文件(-i 选项)
默认情况下,sed 会将修改后的内容输出到标准输出(控制台)。使用 -i 选项可以直接修改文件内容。
sed -i 's/old_pattern/new_pattern/' filename
如果没有提供扩展名,文件会直接被修改。如果想要创建备份,可以使用扩展名:
sed -i.bak 's/old_pattern/new_pattern/' filename
此命令会将原文件修改并创建一个扩展名为 .bak 的备份文件。
3.4 多行处理(-n 和 p)
默认情况下,sed 会打印处理过的每一行。如果只想打印符合某个条件的行,可以使用 -n 选项配合 p 命令。
sed -n 'pattern/p' filename
这表示仅打印匹配 pattern 的行。
例子:
- 只打印包含
pattern的行:sed -n '/pattern/p' file.txt
3.5 多个命令(-e 选项)
使用 -e 选项,可以在一个 sed 命令中执行多个操作。
sed -e 'command1' -e 'command2' filename
例子:
- 先删除第 2 行,再替换第 3 行中的内容:
sed -e '2d' -e '3s/foo/bar/' file.txt
3.6 使用行范围(, 运算符)
sed 支持指定处理的行范围,常用运算符是 ,,表示一个行范围。
sed 'start_line,end_line command' filename
例子:
- 替换第 2 行到第 4 行之间的内容:
sed '2,4s/foo/bar/' file.txt
3.7 使用正则表达式
sed 支持强大的正则表达式功能,你可以使用它来匹配复杂的文本模式。
^:表示行的开始。$:表示行的结束。.:匹配任意一个字符。*:匹配前面的字符零次或多次。[]:匹配字符类。\( \):用来分组和捕获。\1,\2:引用捕获组。
例子:
- 替换以
start开头,end结尾的行:sed 's/^start.*end$/match/' file.txt
3.8 行号和范围
你可以指定行号来进行替换或删除操作。
- 替换第 2 行的
old为new:sed '2s/old/new/' file.txt - 删除从第 3 行到第 5 行的内容:
sed '3,5d' file.txt
3.9 扩展正则表达式(-E 或 -r 选项)
sed 默认使用基础正则表达式(BRE),但你可以通过 -E(或者在某些系统上使用 -r)选项启用扩展正则表达式(ERE),它支持更复杂的正则表达式语法。
sed -E 's/(foo|bar)/baz/' file.txt
4. 总结
sed是一个非常强大的文本处理工具,能够高效地完成查找、替换、删除等操作。- 常用操作包括:替换(
s)、删除(d)、打印(p)、修改文件(-i)等。 - 支持正则表达式,可以进行非常灵活的文本匹配。
- 通过组合不同的
sed命令和选项,可以实现多种复杂的文本处理任务。
如果你需要更多的信息或具体例子,可以随时提问!
博客中所涉及到的图片都有版权,请谨慎使用

浙公网安备 33010602011771号