1.sed
1.1 sed 简介
sed 是一种新型的,非交互式的编辑器。它能执行与编辑器 vi 和 ex 相同的编辑任务。sed 编辑器没有提供交互式使用方式,使用者只能在命令行输入编辑命令、指定文件名,然后在屏幕上查看输出。sed 编辑器没有破坏性,它不会修改文件,除非使用 shell 重定向来保存输出结果。默认情况下,所有的输出行都被打印到屏幕上。
1.2 命令格式
sed 命令行格式为: sed [选项] ‘command’ 输入文本
- 选项 说明
- -n 使用安静模式,在一般情况所有的 STDIN 都会输出到屏幕上,加入-n 后只打印被 sed 特殊处理的行
- -e 多重编辑,且命令顺序会影响结果
- -f 指定一个 sed 脚本文件到命令行执行,
- -r Sed 使用扩展正则
- -i 直接修改文档读取的内容,不在屏幕上输出
1.3 sed操作命令
如果没有指定地址,sed 就会处理输入的所有的行
- 命令 说明
- a\ 在当前行后添加一行或多行
- c\ 用新文本修改(替换)当前行中的文本
- d 删除行
- i\ 在当前行之前插入文本
- h 把模式空间里的内容复制到暂存缓存区
- H 把模式空间里的内容追加到暂存缓存区
- g 取出暂存缓冲区里的内容,将其复制到模式空间,覆盖该处原有内容
- G 取出暂存缓冲区里的内容,将其复制到模式空间,追加在原有内容后面
- l 列出非打印字符
- p 打印行
- n 读入下一输入行,并从下一条命令而不是第一条命令开始处理
- q 结束或退出 sed
- r 从文件中读取输入行
- ! 对所选行意外的所有行应用命令
- s 用一个字符串替换另一个
1.4报错信息
遇到语法错误时,sed 会向标准错误输出发送一条相当简单的报错信息。如果 sed判断不出错在何处,给出令人迷惑的报错信息。
如果没有语法错误,sed将会返回给 shell 一个退出状态,
状态为 0 代表成功,为非 0 整数代表失败
增删操作
2.1增删
- 1.在文件的第1行后面增加一行(new line),并将结果输出到标准输出:
$ sed -e 1a\newline
- 1
- 2.显示文件内容并列出行号,同时,删除第3-5行
$ nl |sed -e '3,5d'
- 1
- 3.只删除第3行
$ nl |sed -e '3d'
- 1
- 4.删除第3行到最后一行
$ nl |sed -e '3,$d'
- 1
- 5.在第二行后(即加在第三行) 加上drink tea? 字样
$ nl |sed -e '2a drink tea?'
- 1
- 6.在第二行前 加上drink tea? 字样
$ nl |sed -e '2i drink tea?'
- 1
- 7.增加两行以上用\(如line1 line2)
nl |sed -e '2a line1 \line2'
- 1
每一行之间都必须要以反斜杠 \ 来进行新行标记
2.2 换
- 1.将第 2-5 行的内容取代成为 No 2-5 number
$ nl | sed '2,5c No 2-5 number'
- 1
- 2.将中666替换成888
$ sed -i 's/666/888/g'
- 1
- 3.删除中所有包含666的行,其它行输出
$ nl |sed '/666/d'
- 1
- 4.搜索 ,找到 666 对应的行,执行后面花括号中的一组命令,每个命令之间用分号分隔,这里把666 替换为 888,再输出这行:
$ nl | sed -n '/666/{s/666/888/;p;q}'
#q 退出
- 1
- 2
- 5.一条 sed 命令,删除 第三行到末尾的数据,并把 HELLO 替换为 RUNOOB :
$ nl | sed -e '3,$d' -e 's/HELLO/RUNOOB/'
- 1