Linux Bash

流编辑sed

2018-12-16  本文已影响14人  迷糊银儿

工作方式

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 直接修改文档读取的内容,不在屏幕上输出

动作:

规则

字符 描述
^ 与行首匹配
$ 与行尾匹配
. 与任一个字符匹配
* 与前一个字符的零个或多个出现匹配
[] 与[]之内的所有字符匹配

规则表达式实例

规则表达式 描述
/./ 将与包含至少一个字符的任何行匹配
/../ 将与包含至少两个字符的任何行匹配
/^#/ 将与以‘#’开头的任何行匹配,通常是注释
/^$/ 将与空行匹配
/}$/ 将与以‘}’结束的任何行匹配
/} *$/ 将与‘}’后面跟随零个或多个空格结束的任意行匹配
[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
Qufangdemac:test qfcomputer$ sed  '/hello/d' a.sh
#this is a beautiful kit
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
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
上一篇 下一篇

猜你喜欢

热点阅读