C04S07-Shell编程之sed文本编辑器

一、sed文本编辑器

1. sed编辑器概述

sed是一种流处理的文本编辑器,和vi(vim)编辑器不同,sed是对命令按行进行操作处理,每次处理一行,直到处理完最后一行文件。

sed命令可以分为两种模式:模式空间和写模式。工作原理是从输入流中读取一行内容并存储到临时的缓冲区(也叫做模式空间)中,默认情况下sed会在输入流所有行上执行操作,除非指定了执行的行。执行完成的内容会被传入输出流,但是所读取的文件内容不会改变,除非通过sed选项配置写模式保存文件的修改,或者通过重定向写入文件。

2. sed命令 – 批量编辑文本文件

sed命令来自英文词组stream editor的缩写,功能是利用语法/脚本对文本文件进行批量的编辑操作。

sed 选项 操作符 文件

常见的选项:

选项功能
-e使用sed操作符处理文件,只有一个操作时可省略
-f使用脚本文件处理文件
-i直接处理文件,不输出到终端
-n只显示处理后的文件内容
-r使用扩展正则表达式

常见的操作符:

操作符功能
a在指定行下方新增文本内容
c整行替换为指定内容
d删除文件内容
g全局有效,通常用于替换
i在指定行上方插入文本内容
p打印输出
r新增读取的文件内容到指定行下方
s替换指定字符串
y替换字符,前后字符要保持长度一致
=显示行号
!对非指定行进行操作
  • 操作符最需要使用引号引起,最好使用单引号。
  • 操作符中可以使用分隔符来分隔模式、替换和其他命令,sed默认的分隔符是/。
  • 操作符部分,除了具体执行的操作符外,还有定位参数,也就是设置执行操作的文本位置。定位参数有两种表示方法:行号定位和正则表达式定位;行号定位也就是根据所在行数来定位文本,正则表达式则是根据匹配的文本内容来定位,如果不设置则是默认的全文。

二、sed常见操作

1. 查找文本

1.1 基本语法

操作符p是用于打印输出文本内容,操作符基本格式如下所示:

[位置1[, 位置2]] p

1.2 具体使用

  1. 查看第1行文本。

    sed -n '1p' test.txt
    
  2. 查看第1~3行的文本内容。

    sed -n '1,3p' test.txt
    
  3. 查看第1行和第3行的文本内容。

    sed -n '1p;3p' test.txt
    
  4. 查看最后一行的文本内容。

    sed -n '$p' test.txt
    
  5. 查看奇数行或偶数行的文本内容。

    sed -n 'p;n' test.txt # 奇数行
    sed -n 'n;p' test.txt # 偶数行
    
  6. 查看包含one的行到three的所有行的文本内容。

    sed -n '/one/,/three/' test.txt
    

2. 增加文本

2.1 基本语法

sed有3个用于增加文件内容的操作符,操作符a在文本的下一行增加新内容;操作符i在文本的上一行新增内容,也被叫做追加;操作符r是用于在文本下一行加入指定文件的内容。

位置 a 新增内容

位置 i 新增内容

位置 r 指定文件

2.2 具体使用

  1. 在第1行的下面新增内容test。

    sed -n '1 a test' test.txt
    
  2. 在第5行的上面新增内容test。

    sed -n '5 i test' test.txt
    
  3. 在最后一行下面新增指定文件num.txt的内容。

    sed -n '$ r num.txt' test.txt
    

3. 修改文本

3.1 基本语法

操作符c用于整行替换,操作符s用于字符串的替换,操作符y用于单个字符的替换。

位置 c 新文本

[位置] s/旧文本/新文本/

[位置] y/旧字符/新字符/
  • 使用y替换字符时,新旧字符(字符串)的长度要保持一致,字符是一一对应的。

3.2 具体使用

  1. 将包含one的行都替换成1。

    sed '/one/ c 1' test.txt
    
  2. 将文件最后一行中的one替换成1。

    sed '$ s/one/1/' test.txt
    
  3. 将文件中的a、b、c替换成A、B、C。

    sed 'y/abc/ABC/' test.txt
    
    • 前后的字符是一一对应的,A替换a、B替换b、C替换c。
  4. 将每行的首字母替换成大写字符或小写字母。

    sed 's/[a-z]/\u&/' test.txt # \l&是转为小写字母
    

4. 删除文本

4.1 基本语法

操作符d用于删除文本内容。

[位置] d

4.2 具体使用

  1. 清空文件。

    sed 'd' text.txt
    
  2. 删除第8行文本。

    sed '8 d' text.txt
    
  3. 删除第3行外的所有文本。

    sed '3 !d' text.txt
    
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值