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
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值