sed简介
sed与grep、gawk并称为文本处理三剑客
--stream editor for filtering and transforming text
sed编辑器:每次从文本文件中读取一行到sed的模式匹配空间进行匹配也称行编辑器
如下图sed有两个空间一个是模式匹配空间,另一个是保持空间,sed可以在模式空间和保持空间中进行数据交换处理,最 nm 终输出模式匹配空间的内容。
sed的语法
sed [OPTION]... {script-only-if-no-other-script} [input-file]...
常用选项
-n:不输出模式空间中的内容至屏幕,逐行处理每行都会存在模式空间中
-e:多点编辑
-f:指定文件中读取编辑脚本
-r:支持使用扩展正则表达式
-i:编辑原始文件中的内容(慎用)
sed -i '/^UUID/d' /etc/fstab ------将fstab中以UUID为开头删除
地址定界
1)单地址
#:指定一个单行
2)地址范围
#,#
#,+#
/part1/,/part2/
#,/part/
3)不指定地址范围,默认为全文处理
4)~:步进
sed '1~2p' /etc/fstab -------显示所有奇数行(第一行开始步进2)
编辑命令
d:删除指定行
sed '1,4d' /etc/fstab
p:打印当前模式空间中的内容
sed -n '1,6p' /etc/fstab
a \text:在行后面追加文本,支持使用\n实现多行追加
sed '$a \This is insert' /etc/fstab --------末行添加This is insert
i \text:在指定行的前面追加文本,支持使用\n实现多行追加
c \test:替换行为单行或者多行文本
w \file:将符合条件的内容另存到file中
sed -n '/UUID/w /tmp/fstab.txt' /etc/fstab
r /path/file:将file的内容读取到指定文件中
sed '5r /etc/issue' /etc/fstab --------读取/etc/issue到/etc/fstab中第五行
中的内容
=:打印行号
sed '/UUID/=' /etc/fstab
!:取反条件
sed '/^UUID/!d' /etc/fstab ----以UUID开头的行都不删除
s///:查找替换,支持s@@@ s###:
替换标记:
g:行内全局替换
i:忽略字符的大小写
p:只显示替换的行
w /path/file:将替换过的行保存到file文件中
sed 's@UUID@uuid@g' /etc/fstab -----把全文中的UUID替换成uuid
sed 's@UUID@&er@g' /etc/fstab ------把全文中的UUID替换成uuider
sed高级编辑命令
h:把模式空间中的内容覆盖到保持空间中
H:把模式空间中的内容追加至保持空间中
g:从保持空间取出数据覆盖至模式空间
G:从保持空间取出数据追加至模式空间
x:把模式空间中的内容与保持空间中的内容进行互换
n:读取匹配到的行的下一行至模式空间
N:追加匹配到的行的下一行至模式空间
d:删除模式空间中的行
D:删除多行模式空间中的所有行
sed -n 'n;p' /etc/fstab -----显示偶数行(读取一行到模式空间,将下一行读取覆盖到模
式空间)
sed '1!G;h;$!d' file --------逆序显示file中的内容
sed '$!N;$!D' file ----------显示文件后两行
sed '$!d' file --------------显示文件最后一行
sed 'G' file ----------------每一行后面多加一个空白行
sed 'g' file-----------------将所有行都变为空白行
sed '/^$/d;G' file-----------有多个空白行合并成一个空白行,没有空白行追加一个空
白行
sed 'n;d' file---------------显示奇数行
sed -n '1!G;h;$p' file-------逆显示file中的内容