sed
sed: Stream EDitor,行编辑器
格式 :
sed [option] ‘[地址][编辑命令]‘
常用选项:
-n,--quiet:不输出模式中的内容到屏幕
-e: 多点编辑
-f: /path/to/script_file :从指定文件中读取脚本
-r:支持扩展的正则表达式
-i:修改源文件
地制定界:
(1)不给地址:对全文进行处理;
(2)单地址:
#: 指定的行
/pattern/: 模式匹配的所有行
(3)地址范围:
#,# 确定行到确定行
#,+# 从左侧#表示的行起始,加上右侧#表示的行数;
$: 最后一行
/pat1/,/pat2/ 模式行到模式行 (第一次匹配)
#,/pat1/ 确定行到第一次匹配模式
(4)~:步进
例如 1~2 2~2
编辑命令:
##模式空间就是匹配到的行
d:删除符合行
p:打印符合行 (d 与 -n ‘ p‘相反效果)
a \text :在行后边追加文本,支持使用\n实现多行追加
i \text :在行前边插入文本:支持使用\n实现多行插入
c \text :替换行为单行或多行(\n)文本
w /path/to/somefile: 保存模式空间中的内容保存到指定文件中
r /path/from/somefile :读取指定文件的文本流至匹配模式中
= :为模式空间中的行打印行号;
! :取反条件(针对地址范围)
s /// :替换,支持使用其他分隔符号,[email protected]@@,s###
s/要查找的内容/替换为的内容/修饰符
修饰符:
p: 显示替换成功的行
g: 全局替换;默认情况下,每一行只替换第一次
&:后向引用
w : /path/to/somefile 将替换成功的结果保存至指定文件中
练习1:删除/boot/grub/grub.conf文件中所有以空白开头的行行首的空白字符;
~]# sed ‘[email protected]^[[:space:]]\[email protected]@‘ /etc/grub2.cfg
练习2:删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的#和空白字符;
~]# sed ‘[email protected]^#[[:space:]]\[email protected]@‘ /etc/fstab
练习3:echo一个绝对路径给sed命令,取出其基名;取出其目录名;
~]# echo "/etc/sysconfig/" | sed ‘[email protected][^/]\+/\[email protected]@‘
高级编辑命令:
h:把模式空间中的内容覆盖至保持空间中
H:把模式空间中的内容追加到保持空间中
g:从保持空间取出数据覆盖模式空间
G:从保持空间取出数据追加模式空间
x: 模式空间与保持空间内容互换
n:读取匹配到的行的下一行覆盖到模式空间 文件中的游标也会随之移动
N:读取匹配到的行的下一行追加至模式空间 文件中的游标也会随之移动
##如,n读第一行后马上自动读第二行进行处理,处理完毕游标移动至第三行,
d:删除模式空间中的行
D:删除多行模式空间中的所有行