工作方式
sed是基于行的,因此按顺序对每一行执行命令。然后,sed 将其结果写入标准输出(stdout),它不修改任何输入文件。
sed -e '1d' a.sh
上述命令的执行过程:
- sed打开a.sh文件
- 将1行读入其模式缓冲区
- 执行编辑命令 d (删除行)
- 打印模式缓冲区
- 对后面的每一行重复1--4步骤
基本语法
sed -参数 -动作 文件
参数:
选 项 | 说明 |
---|---|
-n | 使用安静模式,在一般情况所有的 STDIN 都会输出到屏幕上,加入-n 后只打印被 sed 特殊处理的行 |
-e | 多重编辑,且命令顺序会影响结果 |
-f | 指定一个 sed 脚本文件到命令行执行, |
-r | Sed 使用扩展正则 |
-i | 直接修改文档读取的内容,不在屏幕上输出 |
动作:
- a :新增。 a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
- c :取代。 c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
- d :删除。因为是删除啊,所以 d 后面通常不接任何咚咚;
- i :插入。 i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
- p :打印。亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
- s :取代。可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!
规则
字符 | 描述 |
---|---|
^ | 与行首匹配 |
$ | 与行尾匹配 |
. | 与任一个字符匹配 |
* | 与前一个字符的零个或多个出现匹配 |
[] | 与[]之内的所有字符匹配 |
规则表达式实例
规则表达式 | 描述 |
---|---|
/./ | 将与包含至少一个字符的任何行匹配 |
/../ | 将与包含至少两个字符的任何行匹配 |
/^#/ | 将与以‘#’开头的任何行匹配,通常是注释 |
/^$/ | 将与空行匹配 |
/}$/ | 将与以‘}’结束的任何行匹配 |
/} *$/ | 将与‘}’后面跟随零个或多个空格结束的任意行匹配 |
[abc] | 将与包含任何小写字母'a'或'b'或'c'的任意行匹配 |
^[abc] | 将与以字母'a'或'b'或'c'开始的任意行匹配 |
应用
Qufangdemac:test qfcomputer$ cat a.sh
#this is a beautiful kit
#hello world kitty hhhh
hello fuzi hello shenmu
hello inner hello xian
hello good morning hello hello china
- 忽略注释
Qufangdemac:test qfcomputer$ sed -e '/^#/d' a.sh
hello fuzi hello shenmu
hello inner hello xian
hello good morning hello hello china
- 打印指定行
Qufangdemac:test qfcomputer$ sed -n '1,3p' a.sh
#this is a beautiful kit
#hello world kitty hhhh
hello fuzi hello shenmu
- 打印注释的行
Qufangdemac:test qfcomputer$ sed -n '/^#/p' a.sh
#this is a beautiful kit
#hello world kitty hhhh
- 全文替换
Qufangdemac:test qfcomputer$ sed -e 's/hello/hi/g' a.sh
#this is a beautiful kit
#hi world kitty hhhh
hi fuzi hi shenmu
hi inner hi xian
hi good morning hi hi china
- 指定地址范围+替换
Qufangdemac:test qfcomputer$ sed -e '1,3s/hello/hi/g' a.sh
#this is a beautiful kit
#hi world kitty hhhh
hi fuzi hi shenmu
hello inner hello xian
hello good morning hello hello china
- 输出行号并打印这一行
Qufangdemac:test qfcomputer$ sed '=' a.sh
1
#this is a beautiful kit
2
#hello world kitty hhhh
3
hello fuzi hello shenmu
4
hello inner hello xian
5
hello good morning hello hello china
- 多命令组合
Qufangdemac:test qfcomputer$ sed '1,3p;=' a.sh
#this is a beautiful kit
1
#this is a beautiful kit
#hello world kitty hhhh
2
#hello world kitty hhhh
hello fuzi hello shenmu
3
hello fuzi hello shenmu
4
hello inner hello xian
5
hello good morning hello hello china
- 多命令组合
Qufangdemac:test qfcomputer$ sed -e '1,3p' -e '=' a.sh
#this is a beautiful kit
1
#this is a beautiful kit
#hello world kitty hhhh
2
#hello world kitty hhhh
hello fuzi hello shenmu
3
hello fuzi hello shenmu
4
hello inner hello xian
5
hello good morning hello hello china
- 删除包含hello的行
Qufangdemac:test qfcomputer$ sed '/hello/d' a.sh
#this is a beautiful kit
- 打印包含hello的行
Qufangdemac:test qfcomputer$ sed -n '/hello/p' a.sh
#hello world kitty hhhh
hello fuzi hello shenmu
hello inner hello xian
hello good morning hello hello china
- 打印包含hello的行
Qufangdemac:test qfcomputer$ sed -n '/^.*hello.*$/p' a.sh
#hello world kitty hhhh
hello fuzi hello shenmu
hello inner hello xian
hello good morning hello hello china
网友评论