sed(Stream Editor)在Linux和类Unix系统中是一种非常强大的流编辑器,用于对输入流(例如文件或管道输入)进行文本的逐行编辑。其替换操作主要通过s
(substitute)命令实现。以下是s
命令的基本结构和用法:
sed 's/原字符串/新字符串/选项'
s
:表示替换(substitute)操作。/原字符串/
:这部分是要被替换的模式或者确切的字符串,可以包含正则表达式。/新字符串/
:这是替换原字符串后的新内容。选项:
g
:全局(global)替换,在一行中找到的所有匹配项都会被替换。- 如果不加
g
,则默认只会替换每一行中首次出现的匹配项。
举例说明:
将每一行中的
old_text
替换为new_text
:sed 's/old_text/new_text/g' input_file.txt
只替换每一行的第一个
old_text
:sed 's/old_text/new_text/' input_file.txt
如果原字符串或新字符串中包含特殊字符(如正斜杠
/
或其他特殊字符),需要用\
进行转义:sed 's/\./,/g' input_file.txt # 将句点替换为逗号
使用地址范围限定替换操作的行范围:
sed '5,10s/original/replacement/g' input_file.txt # 只在第5至第10行之间替换
对于变量引用,如果你需要在命令中动态插入变量值,由于shell中单引号不会展开变量,所以应使用双引号:
pattern="old_pattern" replacement="new_pattern" sed "s/$pattern/$replacement/g" input_file.txt
以上就是sed进行替换操作的基础用法,实际上sed的功能远不止于此,还可以结合其他命令和选项完成更复杂的文本处理任务。