sed(stream editor)是可以根据指定的脚本对输入文本进行编辑、替换、删除等操作。
基本用法
sed [options] 'script' [file...]
常用选项
-
-n:抑制默认输出。通常sed会打印每一行,通过-n选项可以只打印被脚本处理的行。sed -n 'p' filename -
-e:允许多脚本处理。可以指定多个-e选项来处理文本。sed -e 'script1' -e 'script2' filename -
-f:从文件中读取脚本。sed -f script.sed filename -
-i:直接编辑文件而不是输出到标准输出。sed -i 's/old/new/' filename -
-r:使用扩展正则表达式(ERE)。sed -r 's/regex/replacement/' filename -
-E:同-r,使用扩展正则表达式(兼容性选项)。sed -E 's/regex/replacement/' filename
基本操作
替换
-
替换字符串
sed 's/old/new/' filename例子:将文件
example.txt中的所有hello替换为world。sed 's/hello/world/' example.txt -
全局替换
sed 's/old/new/g' filename例子:将文件
example.txt中的所有hello替换为world,包括每行中出现的所有hello。sed 's/hello/world/g' example.txt -
指定替换某一行
sed '2s/old/new/' filename例子:将文件
example.txt中第二行的hello替换为world。sed '2s/hello/world/' example.txt -
替换第 N 次出现的匹配项
sed 's/old/new/3' filename例子:将文件
example.txt中每行第 3 个hello替换为world。sed 's/hello/world/3' example.txt
删除
-
删除某一行
sed 'Nd' filename例子:删除文件
example.txt中的第 2 行。sed '2d' example.txt -
删除匹配的行
sed '/pattern/d' filename例子:删除文件
example.txt中包含hello的行。sed '/hello/d' example.txt -
删除从第 M 行到第 N 行
sed 'M,Nd' filename例子:删除文件
example.txt中第 2 到第 4 行。sed '2,4d' example.txt
插入和追加
-
在某一行前插入文本
sed 'N i\text' filename例子:在文件
example.txt中的第 2 行前插入hello world。sed '2i\hello world' example.txt -
在某一行后追加文本
sed 'N a\text' filename例子:在文件
example.txt中的第 2 行后追加hello world。sed '2a\hello world' example.txt
替换指定范围内的文本
-
替换从第 M 行到第 N 行的文本
sed 'M,Ns/old/new/' filename例子:将文件
example.txt中第 2 行到第 4 行的hello替换为world。sed '2,4s/hello/world/' example.txt
高级用法
使用正则表达式
-
替换包含正则表达式模式的文本
sed 's/regex/replacement/' filename例子:将文件
example.txt中所有以h开头的单词替换为world。sed 's/\bh\w*/world/g' example.txt
处理多行文本
-
在每行末尾添加文本
sed 's/$/text/' filename例子:在文件
example.txt中每行末尾添加world。sed 's/$/ world/' example.txt -
在每行开头添加文本
sed 's/^/text/' filename例子:在文件
example.txt中每行开头添加hello。sed 's/^/hello /' example.txt
多个脚本命令
-
使用多个
-e选项sed -e 'command1' -e 'command2' filename例子:在文件
example.txt中将hello替换为hi,然后将world替换为everyone。sed -e 's/hello/hi/' -e 's/world/everyone/' example.txt -
从文件读取脚本
sed -f script.sed filenamescript.sed文件内容:s/hello/hi/ s/world/everyone/使用
sed命令执行脚本:sed -f script.sed example.txt
结合其他命令
-
与
grep结合使用grep 'pattern' filename | sed 's/old/new/' -
与
awk结合使用awk '{print $1}' filename | sed 's/old/new/'