sed--shell 系统学习

概述

 

基本命令格式:

sed 选项 '命令' 文本

选项主要有:

-n : 取消默认输出。当使用-n参数时,文本不会被打印到屏幕上。可以配合使用p参数,将匹配到的内容打印到屏幕上。

-e:允许执行多个脚本

-f:指定执行脚本

-i:修改原始文件内容

-r:在脚本中使用扩展表达式

 

命令:

p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s :替换,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!
d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;a :追加, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!

由上可知sed主要用于文本的追加、替换、删除、插入等。

 

下面示例的文本为score.txt的文件:

NAME    NO.   MATH  ENGLISH  COMPUTER   TOTAL 
--------------------------------------------- 
Marry  2143     78       84       77      239 
Jack   2321     66       78       45      189 
Tom    2122     48       77       71      196 
Mike   2537     87       97       95      279 
Bob    2415     40       57       62      159 
--------------------------------------------- 

 

1- 匹配文本

1.1- 定位文本行

    #匹配第一行
    sed -n '1 p' score.txt
    
    #匹配最后行
    sed -n 'n p' score.txt
    
    #匹配第1-3行
    sed -n '1,3 p' score.txt
    
    #匹配奇数行
    sed -n '1,2 p' score.txt

    #匹配偶数行
    sed -n '0,2 p' score.txt
    
    #匹配第1行后面的5行内容,即1-6行
    sed -n '1,+5 p' score.txt

 

1.2- 正则匹配文本

正则匹配和shell的基本一样,只是需要将正则表达式内容放到“/.../”内,示例:

sed -n '/正则表达式/' 文本

正则匹配字符也一样,只是需要注意的是,对于+、?、{、}是特殊字符,在正则表达式内需要转义,例如使用+匹配,需要这样写:

#匹配7出现至少一次的行
sed -n '/7\+/' 文本

 

简单些几个示例命令:

    #匹配7出现3次及以上的行
    sed -n '/7\{3,\}/ p' score.txt
    
    #匹配以T开头的行
    sed -n '/^T/ p' score.txt
    
    #匹配包含T或M的行
    sed -n '/[TM]/ p' score.txt

 

2- 替换文本s

语法:

s/正则表达式/替换内容/flag

flag主要有:
g: 全局匹配,替换所有符合条件的字符
数字:替换第n个匹配到的内容,n为数字
p:替换第一个匹配到的字符,并将缓冲区输出到标准输出
空:替换第一个匹配到的字符

 

2.1- 简单应用

#将文中所有7替换为9
sed -n 's/7/9/g p' score.txt
sed -n 's/7/9/2 p' score.txt
sed -n 's/7/9/p' score.txt
sed -n 's/7/9/ p' score.txt

 

2.2- 综合应用

只在第1-3行中匹配

sed -n '1,3 s/7/9/g p' score.txt

 

&:引用匹配模式。

例如我们想匹配Tom,并将匹配到的内容替换为dev Tom,可以用&字符表示匹配模式中的内容

sed -n 's/Tom/dev &/g p' score.txt

 

\n。子串。

在正则表达式里用括号括起来表示一个子表达式。在替换字符中用\1,\2可以引用第1、2个子表达式

例如我们想数学、英语成绩统计反了,想颠倒过来。可使用下面方式。

sed 's/\(MATH\)  \(ENGLISH\)/\2  \1/g ' score.txt

注意:在sed中括号需要用转义表达,\(;\)

 

3- 删除d

语法:

sed '正则表达式 d' 文件

其中正则表达式和1中匹配行、字符的匹配规则一样。


例如我们想删除第3行

sed '3 d' score.txt

 

4- 追加a(后插

追加:在匹配到行内容后面一行添加

sed '正则表达式 a 插入的字符' 文件

这里的正则表达式和前面讲的一样


示例:

#在第三行后添加*
sed '3 a *********************************************' score.txt
#在Tom行后添加*
sed '/Tom/ a *********************************************' score.txt

 

5- 插入i(前插

插入:在匹配到行内容前面一行添加

sed '正则表达式 i 插入的字符' 文件

这里的正则表达式和前面讲的一样


示例:

#在第三行前面添加*
sed '3 i *********************************************' score.txt
#在Tom行前面添加*
sed '/Tom/ i *********************************************' score.txt

比较看下a和i区别。

 

 

6- 组合命令

6.1- -e

语法:

sed -e '命令1' -e '命令2' -e '命令n' 文本

示例

先将文本中的7替换为9,然后打印第2、3行

 sed -n -e 's/7/9/g ' -e '2,3 p' score.txt

 

6.2- 使用分号

语法:

 sed -e '命令1;命令2;命令n' 文本

先执行命令1再执行命令2

 

示例

先将文本中7替换为9,然后在第3行后面插入97

sed -e 's/7/9/g;3 a 97' score.txt

 

6.3- 对同一区域执行多个子命令

语法:

sed '区域 {
操作1
操作2
操作n}' 文件

示例

对1-5行,先将Tom替换为tom,再在第3行后插入97,然后打印。

sed -n '1,5 {
s/Tom/tom/g
3 a 97
p}' score.txt

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值