定义
sed是一个非交互式文本编辑起,它可以对文本文件和标准输入进行编辑。
作用方式
sed从文本的一个文本行或标准输入中读取数据,将其复制到缓冲区,然后读取命令行或脚本的第一个命令,对此命令要求的行号进行编辑,重复此过程,直到命令行或脚本中的所有命令都执行完毕。
说明
标准输入可以是来自键盘输入、文件重定向、字符串、变量,甚至来自于管道的文本。
sed适用的场合
sed的作用范围
sed只是对缓冲区中原始文件的副本进行编辑,并不编辑原始的文件。
保存改动的内容时,需要将输出重定向到另一个文件:
sed ‘sed命令‘ input-file > result-file
调用sed的方式
shell命令行
sed [选项] ‘sed命令‘ 输入文件
# sed命令需要用单引号引起来
将sed命令插入脚本文件后,然后通过sed命令调用它
sed [选项] -f sed的脚本文件 输入文件
将sed命令插入脚本文件后,设置该脚本文件为可执行,然后直接执行该脚本文件
./sed的脚本文件 输入文件
说明
此种方式的脚本文件需要以(#!)符号开头,(#!)后面是解析这个脚本的程序名。
说明
以上几种方式,如果没有指定输入文件,sed将从标准输入中接受输入。
sed选项及其意义
选项 | 意义 |
---|---|
-n | 不打印所有行到标准输出 |
-e | 表示将下一个字符串解析为sed编辑命令,如果只传递一个编辑命令给sed,-e选项可以省略 |
-f | 表示正在调用sed脚本文件 |
sed命令的组成
sed命令通常由定位文本行和sed编辑命令两部分组成,sed编辑命令对定位文本行进行各种处理。
定位文本行(两种方式)
选项 | 意义 |
---|---|
x | x为指定行号 |
x,y | 指定从x到y的行号范围 |
/pattern/ | 查询包含模式的行 |
/pattern/pattern/ | 查询包含两个模式的行 |
/pattern/,x | 从与pattern的匹配行到x号行之间的行 |
x,/pattern/ | 从x号行到与pattern的匹配行之间的行 |
x,y! | 查询不包括x和y行号的行 |
sed编辑命令
sed编辑命令标识对文本进行何种处理
选项 | 意义 |
---|---|
p | 打印匹配行 |
= | 打印文件行号 |
a\ | 在定位行号之后追加文本信息 |
i\ | 在定位行号之前插入文本信息 |
d | 删除定位行 |
c\ | 用新文本替换定位文本 |
s | 使用替换模式替换相应模式 |
r | 从另一个文件中读文本 |
w | 将文本写入到一个文件 |
y | 变换字符 |
q | 第一个模式匹配完成后退出 |
l | 显示与八进制ASCII码等价的控制字符 |
{} | 在定位行执行的命令组 |
n | 读取下一个输入行,用下一个命令处理新的行 |
h | 将模式缓冲区的文本复制到保持缓冲区 |
H | 将模式缓冲区的文本追加到保持缓冲区 |
x | 互换模式缓冲区和保持缓冲区的内容 |
g | 将保持缓冲区的内容复制到模式缓冲区 |
G | 将保持缓冲区的内容追加到模式缓冲区 |
#打印input文件的第3~6行
sed -n ‘3,6p‘ input
#使用匹配模式
sed -n ‘/certificate/p‘ input
#带多个编辑命令sed的一般格式为:
sed [选项] -e 编辑命令1 -e 编辑命令2 ... -e 编辑命令n 输入文件
# 编写和调用sed脚本文件
#! /bin/sed -f
/file:/aadd content...
- 说明
-- 如果追加上去的文本有多行,需要用反斜杠符号"\"换行
替换文本
语法
s/被替换的字符串/新字符串/[替换选项]
替换选项
选项 | 意义 |
---|---|
g | 表示替换文本中所有出现被替换字符串之处 |
p | 与-n选项结合,只 |
w 文件名 | 表示将输出定向到一个文件 |
示例
# 默认情况下,sed s命令将替换后的全部文本都输出
# 如果要求只打印替换行,需要结合使用-n和p选项
sed -n ‘s/被替换的字符串/新字符串/p‘ 输入文件
# sed替换命令在默认情况下,即不带g选项时,对某行的第1处匹配关键字进行替换后,就跳转到下面匹配行
# g选项使得sed替换命令对某行的所有关键字都进行替换
# sed替换文本命令还可指定替换第几次匹配的关键字,只需在替换选项加上相应的数字即可,数字范围需要在1~512之间
sed -n ‘s/xxx/xxx_new/2p‘ # 替换第2次匹配的关键字
其他
&符号可用来保存被替换的字符串以供调用
sed -n ‘s/seu/(&)/pg‘ input
>>>等同于
sed -n ‘s/seu/(seu)/pg‘ input
原文:https://www.cnblogs.com/nuochengze/p/14417940.html