Sed

作者: 光明_7c13 | 来源:发表于2019-08-09 14:30 被阅读0次

什么是Sed

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

处理单个或多个文件的命令格式

sed     [options]   '[匹配模式]     [sed 的内部命令]'       file1  file2

把匹配模式和内部命令写在一个文件中的方式

sed [options]  -f   sedcommand.sed   file

options 是可选的选择或参数
匹配模式 是可选的用于在文件中每一行进行匹配到模式,模式可以是正则,也可以是文件的行号
内部的命令也是可选的,但是两个单引号是必须的

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

支持正则表达式

sed默认会输出文件的每一行,无论这行的内容是否能够匹配上匹配模式,假如被匹配到的会再输出一次。
与grep一样,sed在文件中查找模式时也可以使用正则表达式(RE)和各种元字符。
正则表达式是括在斜杠间的模式,用于查找和替换,以下是sed支持的元字符。
使用基本元字符集^, $, ., *, [], [^], \< \>,\(\),\{\}
使用扩展元字符集 ?, +, { }, |, ( )使用扩展元字符的方式:

sed  -r ' ' passwd

sed -r 'p' passwd

sed -r -n 'p' passwd  `n`屏蔽默认输出

sed -r -n '/root/p' passwd 显示存在root的行  ^显示以root开头的行

搜索替换

sed会自动打印文件的每一行,查找模式匹配的行,找到后执行后面的命令,默认是输出(不加-n)

sed -r 's/root/localhost/' passwd  搜索每一行找到root,把第一个替换成localhost

sed -r `s/root/localhost/g` passwd 全局替换

sed -r 's/root/localhost/gi' passwd  忽略大小写

sed -ri 's/root/localhost/g' passwd  修改文件内容

sed -r '/root/d' 找到含有root 的进行删除

sed -r '#root#d#' passwd 可以使用不用的定界符

注意:
sed 默认是在只读的模式下进行修改的不会直接修改文件内容sed -r -i 加了-i选项才会修改文件内容
当模式匹配中使用其他定界符号时,需要对于其进行转义。
其他定界符在s搜索替换时不必转义比如

sed -r 's#root#localhost#'  passwd 
sed  -r  's%root%localhost%'      passwd
sed  -r  's|root|localhost|'      passwd

扩展

sed   -r   'd'     passwd  全部删除
sed   -r    '2 d'  passwd   删除两行
sed   -r    '1,2  d'   passwd   第1行到第2行删除
sed   -r    '/root/   d'     passwd    含有root字符串的行删除

从含有 root 字符串的行开始,一直到第 5 行进行删除
sed  -r  '/root/,5  d'        passwd

 从行首是 adm 的行开始,一直到 20 行进行删除
sed  -r  '/^adm/,20  d'       passwd

 从行首是 adm 的行,以及此行之后的 2 行进行删除
sed  -r  '/^adm/,+2  d'      passwd

含有 root 的行不删除,其他都删除
sed  -r  '/root/  !d'         passwd

 奇数行删除,其实就是 匹配到 行号 除以 2 ,余数是 1 的行
sed  -r  '1~2  d'             passwd

偶数行打印
sed  -rn  '0~2  p'            passwd

在212391前添加zgh字符串
sed -r 's/^(212.*)/zgh\1/g'   \1是指括号内容之前添加 

sed内部命令

sed命令告诉 sed 对匹配到的行进行何种操作,包括打印、删除、修改等。
命令功能详解

a 在当前行后添加一行或多行
c 用新文本修改(替换)当前行中的文本
d 删除行
i 在当前行之前插入文本
l 列出非打印字符
p 打印行
n 读入下一输入行,并从下一条命令而不是第一条命令开始对其的处理
q 结束或退出sed
! 对所选行以外的所有行应用命令

s 用一个字符串替换另一个
s 替换标志
g 全局替换
i 忽略大小写
r 从文件中读
w 将行写入文件
y 将字符转换为另一字符(不支持正则表达式)

h  清除保持空间的内容后,把模式空间里的内容复制到保持空间
H  把模式空间里的内容追加到保持空间
g  清除模式空间的内容后, 取出保持空间的内容,并复制到模式空间
G  取出保持空间的内容,追加在模式空间原有内容的后面
x  交换模式空间与保持空间的内容

Sed命令选项

-e 允许多项编辑
-f 指定sed脚本文件名
-n 取消默认的输出
-i inplace,就地编辑
-r 支持扩展元字符

相关文章

网友评论

      本文标题:Sed

      本文链接:https://www.haomeiwen.com/subject/txuljctx.html