在Linux系统中,sed
(Stream Editor)是一个强大的流编辑器,用于对输入流(如文件或管道中的数据)进行各种文本转换。它逐行读取输入,并根据提供的脚本命令执行相应的操作,然后将结果输出到标准输出(默认行为),或者重定向到其他文件。以下是一些关于sed
命令的基本用法和常见选项:
基本命令格式:
sed [选项] '命令' 输入文件
例如:
sed 's/old/new/g' file.txt
这个命令会在file.txt
文件中全局地将old
替换为new
。
常用选项:
-n
或--quiet
或--silent
:不自动打印模式空间的内容,只有当使用了p
命令时才打印匹配的行。-i
:直接修改原文件内容,而不是仅显示修改后的结果。-e
:允许在同一命令行中指定多个编辑命令。-f scriptfile
:从指定文件中读取编辑命令。
常见命令:
s/pattern/replacement/flags
:替换命令,查找pattern并替换为replacement,可选的flags包括g
(全局替换)、i
(忽略大小写匹配)等。a\ text
:在当前行后追加文本text。i\ text
:在当前行前插入文本text。d
:删除模式空间中的行(即删除匹配的行)。p
:打印模式空间中的行。w file
:将模式空间中的行写入到file文件中。r file
:读取file文件的内容并将其插入到当前行之后。
示例:
# 将所有包含"example"的行替换为"test"
sed 's/example/test/g' input.txt
# 在每一行后面添加一个换行符和"haha"
sed 'G' input.txt
# 静默处理文件并在匹配"start"的行后插入一行文本
sed -n '/start/{a \\\nnewline content\\n}; p' input.txt
# 直接修改文件,将"old"替换为"new"
sed -i 's/old/new/g' file.txt
sed
的强大之处在于可以编写复杂的正则表达式来匹配和替换文本,并且可以编写多条命令串联起来处理流中的数据,非常适合于批处理文本任务。