sed Stream EDitor 行编辑器
sed 是一种流编辑器,它一次处理一行内容,处理时把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space)接着用sed 命令处理缓冲区的内容,处理完成后把缓冲区的内容送往屏幕,然后读入下一行,执行下一个循环,但不会清空保留空间,这样不断重复,知道文件末尾,文件内容并没有改变,除非你使用重定向存储输出
功能:主要用来自动编辑一个或多个文件,简化对文件复杂的操作,编写转换程序等
sed工具的用法 sed 【option】 …. ‘script’ inputfile ………
[option] 选项 -n : 不输出模式空间内容到屏幕上,即不自动打印
-e : 多点编辑
-f : /PATH/SCRIPT_FILE : 从指定文件中读取编辑脚本
-r : 支持使用扩展正则表达式
-i.bak : 备份文件并原文编辑
‘script’ ‘地址命令’
1 不给地址,对全文进行处理
2 单地址: # : 指定行数 $ :最后一行
/pattern/ : 别此处模式所能匹配到的每一行
3 地址范围: # , # # , +# /pat1/ , /pat2/ # , /pat1/
4 ~ : 进步 1~2 奇数行 2~2 偶数行
例如:
创建一个文件 f1 里面包含 1-10数字 用命令sed来做实验
sed ‘4p’ f1
只打印第4行 用 -n
sed -n ‘4p’ f1
打印偶数行 用 ‘2~2p’ 打印偶数 用’1~2p’打印奇数
sed -n ‘2~2p’ f1
-e 多点打印
p: 打印模式空间内容,追加到默认输出之后
sed -ne ‘2p’ -e ‘4p’ f1
-i.bak 备份 并对原文件编辑 sed -i.bak ‘/aliaseas/aalias p=poweroff’ .bashrc
-f 从文件中读取编辑脚本
sed -nf sedscript.txt f1
sed 工具的编辑命令
d : 删除模式空间的匹配行,并立即启用下一轮循环
!:模式空间中匹配行取反处理
=: 为模式空间中的行打印行号 显示在/etc/passwd 文件中含有root 的行号
a [\]text:在指定行后面追加文本 支持使用\n实现多行追加
i [\]text:在行前面插入文本
c [\]text:替换行为单行或多行文本
w 文件: 保存模式匹配的行至指定文件
r /path/somefile:读取指定文件的文本至模式空间中 匹配到的行后
s///:查找替换,支持使用其它分隔符,s@@@,s###
在/etc/default/grub 给GRUB_CMDLINE_LINUX=”crashkernel=auto rhgb quiet” 后面加个字符串xyz
高级编辑命令
P : 打印模式空间开端至 \n 内容,并追加到默认输出之前
h :把模式空间中的内容覆盖至保持空间中
H :把模式空间中的内容追加至保持空间中
g :从保持空间取出数据覆盖至模式空间
G :从保持空间取出数据追加至模式空间
x : 把模式空间内容与保持空间内容互换
n :读取匹配到的行的下一行覆盖至模式空间
N :读取匹配到的行的下一行追加至模式空间
d :删除模式空间中的行
D :如果模式空间包含换行符,则删除直至第一个换行符的模式空间中,并不会读取新的输入行,而使用 合成的模式空间重新启动循环,如果模式空间不包含换行符,则会像发出 d 命令那样启动正常的循环
只保留奇数行
倒序显示
只留最后一行
只保留最后2行
将文本文件的n和n+1行合并为一行,n为奇数行
本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/97375