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.txt
i
:忽略大小写进行匹配。sed 's/hello/world/i' file.txt
n
:显示替换后的结果(而不是默认的输出)。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
命令和选项,可以实现多种复杂的文本处理任务。
如果你需要更多的信息或具体例子,可以随时提问!
标签:pattern,filename,语法,sed,file,txt,替换,详解 From: https://www.cnblogs.com/shuiche/p/18539843