sed
(Stream Editor)是Linux中的一种流编辑器,主要用于文本的过滤和转换。与大多数文本编辑器不同,sed
用于非交互式的文本处理,常被用在批处理任务中。它可以对输入的文本流进行逐行处理,并根据脚本或命令对文本进行修改。
sed
的基本语法sed [选项] 'script' [文件]
script
:sed
脚本,由命令和模式组成,用来定义对文本进行的操作。[文件]
:需要处理的文本文件。如果不指定文件,sed
会从标准输入读取文本。-e
:允许在一次调用中使用多个sed
命令。-i
:直接编辑文件内容,而不是输出到标准输出(注意备份)。-n
:只打印处理过的行,而不是所有行。-r
:使用扩展正则表达式(ERE)。-f
:从文件中读取sed
脚本。sed
的基本命令s
)s
命令用于替换文本,sed
最常见的用法之一。
基本语法:
sed 's/原文本/新文本/' 文件名
示例:
echo "hello world" | sed 's/world/universe/'
输出:hello universe
全局替换:
默认情况下,sed
只替换每行中的第一个匹配项。要替换所有匹配项,需要使用全局标志 g
:
echo "apple apple apple" | sed 's/apple/orange/g'
输出:orange orange orange
替换指定出现次数的匹配:
可以通过在 s///
命令后添加数字来指定替换第几个匹配项:
echo "apple apple apple" | sed 's/apple/orange/2'
输出:apple orange apple
d
)d
命令用于删除行。
基本语法:
sed 'N d' 文件名
这里的 N
表示行号。
示例:
删除文件 file.txt
中的第2行:
sed '2d' file.txt
删除包含特定模式的行:
sed '/pattern/d' file.txt
i
) 和追加 (a
)i
命令在指定行之前插入文本,a
命令在指定行之后追加文本。
基本语法:
sed 'N i\插入的文本' 文件名
sed 'N a\追加的文本' 文件名
示例:
在第2行之前插入一行:
sed '2i\This is an inserted line' file.txt
在第2行之后追加一行:
sed '2a\This is an appended line' file.txt
c
)c
命令用于用新文本替换指定的行。
基本语法:
sed 'N c\新文本' 文件名
示例:
用New Line Content
替换第2行:
sed '2c\New Line Content' file.txt
p
)p
命令用于打印匹配的行。配合 -n
选项使用时,只输出匹配行。
基本语法:
sed -n '/pattern/p' 文件名
示例:
只打印包含 hello
的行:
sed -n '/hello/p' file.txt
-i
)使用 -i
选项可以直接在原文件上进行替换,而不需要将结果输出到新的文件。
示例:
将 apple
替换为 orange
,并将结果保存到原文件中:
sed -i 's/apple/orange/g' file.txt
sed
中的地址与范围sed
可以指定行号或模式来定义命令的作用范围。
对第3行进行替换:
sed '3s/apple/orange/' file.txt
对第1至3行进行替换:
sed '1,3s/apple/orange/' file.txt
对所有包含 pattern
的行进行替换:
sed '/pattern/s/apple/orange/' file.txt
对第1个pattern
和第2个pattern
之间的行进行操作:
sed '/pattern1/,/pattern2/s/apple/orange/' file.txt
sed
中的正则表达式sed
支持正则表达式,可以用来进行复杂的模式匹配和替换。
示例:
匹配以数字开头的行:
sed '/^[0-9]/d' file.txt
删除所有以数字开头的行。
替换行尾的空白字符:
sed 's/[[:space:]]*$//' file.txt
替换第一个匹配的单词:
sed 's/\/replacement/' file.txt
sed
的其他高级用法使用 -e
选项或通过分号分隔多个命令:
sed -e 's/apple/orange/' -e 's/banana/grape/' file.txt
或者:
sed 's/apple/orange/; s/banana/grape/' file.txt
-f
)可以将一系列的 sed
命令保存在文件中,并使用 -f
选项执行这些命令:
sed -f commands.sed file.txt
sed
可以结合其他命令如 grep
、awk
、cut
等,进行复杂的文本处理。
示例:
grep 'pattern' file.txt | sed 's/old/new/'
sed
是一个功能强大的文本处理工具,广泛用于日志处理、配置文件编辑和数据流修改等场景。通过 sed
的基本命令和模式匹配,可以高效地完成各种文本处理任务。