sed 是一种在线的、非交互式的编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临 时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成 后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操 作;编写转换程序等。

sed 命令格式

sed [options] edit_commands [file] # [ ] 中的内容为可选可不选

  注意:sed 和 grep 不一样,不管是否找到指定的模式,它的退出状态都是0,只有当命令存在语法错误 时,sed的退出状态才是非0

sed 支持正则表达式

sed 在文件中查找模式时也可以使用正则表达式(RE)和各种元字符。

正则表达式是括在斜杠间的模式, 用于查找和替换,以下是sed支持的元字符。

shell sed语法

 

 shell sed语法

 

 sed 常用选项

shell sed语法

 

 

 sed 常用命令选项

shell sed语法

 

 

 sed 高级命令选项

shell sed语法

 

 

 sed 替换标志

shell sed语法

 

 

 sed 命令使用实例

 sed 命令进行文本替换

sed 使用 s 命令来进行文本替换操作

sed 's/srcStr/dstStr/' file

  其中,srcStr 为想要替换的文本,dstStr 为将要替换成的文本。使用 s 命令时,sed 编辑器会在一 行一行地读取文件 file,并在每行查找文本 srcStr,如果找到了,则将该处的 srcStr 替换为 dstStr

/ 字符为界定符,用于分隔字符串(sed 编辑器允许使用其他字符作为替换命令中的字符串分隔 符):

 sed 's!/bin/bash!/BIN/BASH!' /etc/passwd # 使用 ! 作为字符串分隔符
sed 's#3#88#g' datafile

 默认情况下,替换命令只会替换掉目标文本在每行中第一次出现的地方。若想要替换掉每行中所有 匹配的地方,可以使用替换标记 g。替换标记放在编辑命令的末尾。除了 g 外,还有几种替换标 记:

 数字指明替换掉第几次匹配到的文本

没有设置这个标记时,默认是替换第一次匹配的文本

sed 's/root/ROOT/2' /etc/passwd

  这行命令将 /etc/passwd 文件中每行的第 2 个 root 替换为 ROOT

g 替换所有匹配到的文本

sed 's/root/ROOT/g' /etc/passwd

  这行命令将 /etc/passwd 文件中的 root,全部替换为 ROOT;

p 打印与替换命令中指定模式(srcStr)相匹配的行

sed 's/root/ROOT/p' /etc/passwd

  执行这命令,会在 STDOUT 上看到包含有 root 的行被输出了两次,一次是 sed 编辑器自动输出 的;另一次则是 p 标记打印出来的匹配行 单独地使用 p 标记没什么用处,通常将 p 标记和 -n 选项结合起来使用,这样就可以只输出被匹配 替换过的行了

sed -n 's/root/ROOT/gp' /etc/passwd # 将 /etc/passwd 中 所有的 root 都替换成 ROOT,并输出被修改的行

  注:可以使用 " = " 命令来打印行号,用法与 p 一样。

w file :将替换的结果写到文件中

只保存被修改的行,与 -n + p 的功能类似

sed -n 's/root/ROOT/g w change.txt' /etc/passwd # 将
/etc/passwd 中所有的 root 都替换成 ROOT,并将被修改的行保存到文change.txt 中去

  

 

相关文章: