sed
命令详解
sed
(stream editor,流编辑器)是 Linux 和 Unix 系统中功能强大的文本处理工具,它能够对输入流(如文件、管道输入等)进行逐行处理,从而实现多种多样的文本编辑操作。
基本语法
sed
的基本语法形式如下:
sed [options] 'command' file(s)
options
:这是一些可供选择的参数。例如,-n
选项表示只输出经过处理的行;-i
选项则用于直接修改文件内容,而不是将结果输出到标准输出。command
:要执行的编辑命令,可以是单个命令,也可以是由多个命令组成的脚本。file(s)
:需要进行处理的文件。
常用命令
替换命令(s)
- 语法:
s/pattern/replacement/flags
。 - 功能:该命令用于将每行中第一个匹配到的
pattern
(模式)替换为replacement
(替换内容)。 - 示例:
sed 's/old/new/' file.txt
:此命令会将文件file.txt
中的每行第一个“old”替换为“new”。sed 's/old/new/g' file.txt
:这里的“g”表示全局替换,即会将每行中所有的“old”都替换为“new”。
删除命令(d)
- 语法:
d
。 - 功能:使用该命令可以删除匹配到的行。
- 示例:
sed '/pattern/d' file.txt
:此命令会删除包含“pattern”的行。
插入命令(i)和追加命令(a)
- 语法:
i\inserted_text
:在匹配行之前插入指定的文本。a\appended_text
:在匹配行之后追加指定的文本。
- 功能:用于在指定位置插入或追加文本。
- 示例:
sed '/pattern/i\This is inserted text.' file.txt
:该命令会在包含“pattern”的行之前插入“This is inserted text.”。sed '/pattern/a\This is appended text.' file.txt
:此命令会在包含“pattern”的行之后追加“This is appended text.”。
(四)打印命令(p)
- 语法:
p
。 - 功能:用于打印匹配到的行。
- 示例:
sed -n '/pattern/p' file.txt
:该命令会打印包含“pattern”的行,其中“-n”选项用于抑制默认输出,仅输出经过处理的行。
多行处理命令(N、H、h、G、g)
N
:将下一行读入模式空间(pattern space),并与当前行合并。H
(大写):将模式空间的内容追加到保持空间(hold space)。h
(小写):将模式空间的内容复制到保持空间,覆盖原有内容。G
(大写):将保持空间的内容追加到模式空间。g
(小写):将保持空间的内容复制到模式空间,覆盖原有内容。- 示例:在处理包含多行内容的日志文件时,可以灵活运用这些命令来合并多行进行处理,以满足特定的文本处理需求。
高级用法
使用正则表达式
sed
支持强大的正则表达式,这使得它能够更加灵活地进行文本匹配和处理。例如,sed '/^[0-9]+$/d' file.txt
:这个命令会删除文件中只包含数字的行,其中^[0-9]+$
是一个正则表达式,表示匹配一行中从开头到结尾都是数字的内容。
从文件读取命令
可以将一系列sed
命令存储在一个文件中,然后使用-f
选项读取该文件来执行命令。例如,先创建一个名为commands.sed
的文件,文件内容为s/old/new/g
,然后执行sed -f commands.sed file.txt
,这样就可以按照文件中定义的命令对file.txt
进行处理。
管道和重定向
sed
可以与其他命令巧妙地结合使用,通过管道和重定向来实现复杂的文本处理流程。例如,cat file.txt | sed 's/old/new/' > new_file.txt
:这个命令首先使用cat
命令读取file.txt
文件的内容,然后通过管道将其传递给sed
命令进行“old”到“new”的替换操作,最后将处理结果通过重定向输出到new_file.txt
文件中。