流编辑sed

工作方式

sed是基于的,因此按顺序对每一行执行命令。然后,sed 将其结果写入标准输出(stdout),它不修改任何输入文件。

sed -e '1d' a.sh

上述命令的执行过程:

  1. sed打开a.sh文件
  2. 将1行读入其模式缓冲区
  3. 执行编辑命令 d (删除行)
  4. 打印模式缓冲区
  5. 对后面的每一行重复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

你可能感兴趣的:(流编辑sed)