sed进阶详解

sed 行编辑器 用法详解
-n 不输出到屏幕
-e 多点编辑
-ffile从指定文件中读取编辑脚本
-r支持使用拓展的正则表达式
-i替换原文件
地址界定
(1)不给地址默认全文处理
(2)单地址
# 指定的行
/pattern/被此处模式所能匹配到的每一行
(3)地址范围
#,#
#,+#
#,/pat1/
/pat1/,/pat2/
(4)~ 步进
1~2从第一行开始,每隔两个显示
2~2从第二行开始,每隔两个显示
sed -n '1~2p'file显示奇数行
sed -n '2~2p'file显示偶数行
例如
sed '/^UUID/d'/etc/fstab删除所有UUID开头的行
但是并不会写入到文件里除非你>/etc/fstab这个只是输出文本而已,类似于过滤
编辑命令
d 删除
sed'/^UUID/d' /etc/fstab

p显示模式空间中的内容一般一行会显示两次
sed-n'/^UUID/p' /etc/fstab就不会显示两遍了

a \'text'
例如 sed '/^UUID/a \# hello'/etc/fstab
就会在每行后面再加一行
如果'/^UUID/a \# hello.\n# welcom' 就会追加两行

i \'text'是在前面插入a在行后面加入

c \text 替换行位单行或多行文本
'/^UUID/c \# hello.\n# welcom'

w
sed'/^UUID/w/tmp/fstab'/etc/fstab
保存到指定文件

=显示符合条件的行所在的行号
r
sed '6r /etc/passwd'/etc/fstab
将passwd 写到fstab的第六行后面

!取反条件
sed'/^UUID/!d' /etc/fstab

s/查找条件/替换的内容/支持使用其他分隔符(s@@@ s###)
sed 's@^UUID@uuid@'/etc/fstab
sed 's/^UUID/uuid/'/etc/fstab
sed 's@r..t@&er/g'/etc/passwd
将root-->rooter
\+ 至少出现一次
sed's@^[[:space:]]\+@@'/etc/grub2.cfg

echo '/etc/sysconfig/' |sed 's@[^/]\+/\?$@@'
替换标记:g全行替换;
p显示替换成功的行;
w /to/sfile 将替换成功的行保存到指定文件里、

模式空间:编辑操作的空间,如果暂时不用可以放到保持空间,之后再取出
保持空间:理解为仓库

高级编辑命令:
h:把模式空间中的内容覆盖到保持空间中
H:把模式空间中的内容追加到保持空间中
g:从保持空间中取出数据覆盖至模式空间
G:从保持空间取出内容追加至模式空间
x:把模式空间中的内容和保持空间中的内容进行互换
n:读取匹配到的行的下一行至模式空间
N:追加匹配到的行的下一行至模式空间
d:删除模式空间中的行
D:删除多行模式空间中的所有行

例子:
sed -n 'n; p'FILE只会显示偶数行
sed '1!G; h; $!d'FILE
第一行除外,从保持空间取出内容追加至模式空间;把模式空间中的内容覆盖到保持空间中;$!除了最后一行,删除模式空间中的行
效果就是倒序:逆向显示文件内容
sed '$!N; $!D' FILE 取文件后两行

sed '$!d' 取最后一行
sed 'G' FILE每行后面加一空白行

sed 'g'FILE全部替换为空白行
sed '/^$/d; G' FILE在每个文件后面加入空白行;如果有多个空白行合并为一个
sed 'n; d'FILE显示奇数行
【sed进阶详解】sed -n '1!G; h; $p'FILE倒序显示文件内容

    推荐阅读