sed 是一个“交互式的”面向字符流的编辑器,它被认为是面向字符流的,这是因为输入流通过程序将输出直接送到标准输出端。输入一般来自文件,但也可可以直接来自键盘。输出在默认情况下是在终端的屏幕上,但是也可以输出到文件中,sed 能够通过解析脚本来工作,该脚本指定了将要执行的动作。
sed 在处理文件时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用 sed 命令处理缓冲区中的内容,处理完成后,把缓冲区的内容发送到输出端,然后接着处理下一行,这样不断重复,直至文件末尾。这个过程中文件内容并没有改变,除非你使用重定向存储输出。sed 主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。
语法
1 2 3 4 5 6 7 8 9 10 11 12
sed [options] command file sed [options] -f scriptfile file
d:删除 p:打印 a: 在当前行后添加一行或多行 sed '2axxx' [文件信息] c:用新文本修改(替换)当前行 sed '2cxxx' [文件信息] i: 在当前行之前,插入文本(单独使用时) sed '2ixxx' [文件信息] r: 在文件中读内容 sed '2r r.txt' [文件信息] w: 将指定行写入文件 sed '2w w.txt' [文件信息] y: 将字符转换成另一个字符 sed '2y/fa/FA/' [文件信息] s: 将字符串转换成另一个字符串(每一行只替换一次) sed 's/11/22/' [文件信息] g: 全局替换 sed 's/11/22/g' [文件信息] i: 忽略大小写(跟 s 模式一起使用时) &:代表前面匹配到的内容
示例
追加:
1 2 3 4 5 6
sed 'a\the end\' sed.txt 在所有行末尾追加一行“the end” sed '$a\the end\' sed.txt 在最后一行末尾追加“the end” sed '3,5a\the end\' sed.txt 在3到5末尾追加“the end” sed 's/^/\#&/g' sed.txt 在每行开头加上“#” sed 's/$/&\!/g' sed.txt 在文件中每行结尾加上“!” sed '$r sed.txt' sed.txt 将文件sed.txt的内容追加到sed.txt的最后一行
插入:
1 2
sed 'i A' sed.txt 在每一行前插入“A” sed '1i\begin\' sed.txt 在第一行前插入一行“begin”
替换:
1 2 3 4 5
sed '1,2c str' sed.txt 将1-2行替换为“str”(1-2行合并被替换) sed 'y/ad/AD/' sed.txt 替换所有匹配字符“a”->“A”,“d”->“D”
# 批量替换IP地址 sed -r 's/192.168.0.([0-9]{1,2})/172.16.0.\1/g' sed.txt
删除:
1 2 3 4 5 6 7 8 9 10 11 12 13
sed -e '2d' sed.txt 删除第2行 sed -e '3,$d' sed.txt 删除第3行到末尾 sed -e '$d' sed.txt 删除最后一行 sed -e '/^\#/'d sed.txt 删除以“#”开头的行 sed -i '/^$/d' sed.txt 删除空白行 sed 's/[ ]*//g' sed.txt 删除空格
sed 'N;$!P;D' sed.txt 删除倒数第2行 sed 'N;$!P;$!D;$d' sed.txt 删除倒数2行
# 若要删除最后n行,可参考如下: max=$(sed -n '$=' sed.txt) sed $(($A-n+1)),${A}d sed.txt