Linux sed 命令详解

定义

sed 命令是将一系列的编辑命令应用于一批文本的理想工具。sed 命令拥有非交互式和高效的特点。

它可以对来自文本文件以及标准输入的文本进行编辑。其中,标准输入可以是来自键盘、文件重定向、字符串、变量或者是管道的文本。

sed 命令会从文件或者标准输入中一次读取一行数据,将其复制到缓冲区,然后读取命令行或者脚本的编辑子命令,对缓冲区中的文本行进行编辑。重复此过程,一直到所有的文本行都处理完毕。
在这里插入图片描述

sed 命令的基本语法如下:

sed [options] [script] [inputfile...]
在这里插入图片描述

工作方式

(1)首先,用户可以在命令行直接执行 sed 命令,其基本语法如下:
sed [options] commands inputfile

(2)其次,用户可以将 sed 操作命令写入脚本文件,然后通过 sed 命令读取该文件并且执行其中的命令,其基本语法如下:
sed [options] -f script inputfile

(3)最后,用户通过将 sed 的操作命令写入文件,然后将该脚本文件授予用户执行权限,其基本语法如下:
./script inputfile

其中,script 代表保存 sed 命令的脚本文件。在脚本文件中,用户应该在 #! 符号后面执行该脚本的解释器,因此在这种方式下,sed 脚本文件的第一行应该如下:
#! /bin/sed

使用行号定位文本行

定位某个特定的行,语法如下: x

定位某段连续的行,语法如下: x,y

指定起始行和步长: first~step

指定文件的第一行和最后一行

  • 第1行:1
  • 最后1行:$

指定某行后面的几行,语法如下: x,+n

使用正则表达式定位文本行:

除了使用行号定位文本行之外,sed 命令还支持正则表达式定位。sed 命令中,正则表达式的语法如下:
/regexp/
在这里插入图片描述

除了定位参数之外,sed 命令的另外一个组成部分就是编辑命令。常用的编辑命令有打印、插入、删除以及替换等。

sed 命令的基本语法

[address1[,address2]] command [argument]

a\ 在当前行下面插入文本。
i\在当前行上面插入文本。
c\ 把选定的行改为新的文本。
d删除,删除选择的行。
D 删除模板块的第一行。
s 替换指定字符
h 拷贝模板块的内容到内存中的保持缓冲区,覆盖。
H追加模板块的内容到内存中的保持缓冲区,追加。
g 获得内存缓冲区的内容,并替代当前模板块中的文本。
G 获得内存缓冲区的内容,并追加到当前模板块文本的后面。
l 列表不能打印字符的清单。
n 读取下一个输入行,用下一个命令处理新的行而不是用第一个命令。
N 追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码。
p 打印模板块的行。
P(大写) 打印模板块的第一行。
q 退出 Sed。
r file 从file中读行。
w file 写并追加模板块到 file 末尾。
W file 写并追加模板块的第一行到 file 末尾。
!表示后面的命令对所有没有被选定的行发生作用。
= 打印当前行号码。

在sed命令中,选择文本行主要通过位置参数来完成,基本语法如下:
[address1[,address2]] p
在上面的语法中,address1 和 address2都是位置参数。如果省略位置参数,则表示选择整个文件。子命令 p 表示将缓冲区中的文本行执行输出操作,即打印(print)缓冲区中的文本。

【例1】演示使用行定位方法来选择输出某些文本行

#! /bin/bash
#输出1~3行,不使用-n选项
sed '1,3p' students.txt
echo "===================================="
#输出1~3行,使用-n选项, -n或--quiet:仅显示script处理后的结果;
sed -n '1,3p' students.txt
[root@linux chapter10]# ./ex10-1.sh 
200200110       	Abdul
200200110       	Abdul
200200164       	Abram
200200164       	Abram
200200167       	Bartley
200200167       	Bartley
200200168       	Bennett
200200172       	Cecil
200200173       	John
200200187       	Cat
====================================
200200110       	Abdul
200200164       	Abram
200200167       	Bartley

【例2】演示使用正则表达式来作为定位参数

#! /bin/bash
#使用正则表达式定位
result
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值