sed 行编辑器 用法详解
-n 不输出到屏幕
-e 多点编辑
-f file 从指定文件中读取编辑脚本
-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 -n '1!G;h;$p' FILE 倒序显示文件内容