sed指令用法详解

简介: sed指令用法详解

1. sed的作用

sed(stream editor)sed 会根据脚本命令来处理文本文件中的数据,这些命令要么从命令行中输入,要么存储在一个文本文件中,此命令执行数据的顺序如下:

  • 每次仅读取一行内容;
  • 根据提供的规则命令匹配并修改数据。注意,sed 默认不会直接修改源文件数据,而是会将数据复制到缓冲区中,修改也仅限于缓冲区中的数据;
  • 将执行结果输出。
    当一行数据匹配完成后,它会继续读取下一行数据,并重复这个过程,直到将文件中所有数据处理完毕。

2. sed知识点

2.1 sed语法

1> sed命令行格式语法:

sed [option] 'command(s)' files
• 1

2> sed脚本文件语法

sed [-n] -f scriptfile files
• 1

2.2 sed常用选项

选项 说明
-n 使用安静模式,在一般情况所有的 STDIN 都会输出到屏幕上,加入-n 后只打印被 sed 特殊处理的行
-e 多重编辑,且命令顺序会影响结果
-f 指定一个 sed 脚本文件到命令行执行,
-r Sed 使用扩展正则
-i 直接修改文档读取的内容,不在屏幕上输出

2.3 sed定位

Sed 命令在没有给定的位置时,默认会处理所有行

Sed 支持以下几种地址类型:

指令 说明
first~step first 指起始匹配行, step 指步长,例如: sed -n 2~5p 含义:从第二行开始匹配,隔 5 行匹配一次,即 2,7,12…
$ $符表示匹配最后一行
/REGEXP/ 表示匹配正则那一行,通过//之间的正则来匹配
\cREGEXPc 这个是表示匹配正则那一行,通过\c 和 c 之间的正则来匹配,c 可以是任一字符
addr1, add2 定址 addr1, add2 决定用于对哪些行进行编辑。地址的形式可以是数字、正则表达式或二者的结合。如果没有指定地址, sed 将处理输入文件中的所有行。如果定址是一个数字,则这个数字代表行号,如果是逗号分隔的两个行号,那么需要处理的定址就是两行之间的范围(包括两行在内)。范围可以是数字,正则或二者组合。
addr1, +N 从 addr1 这行到往下 N 行匹配,总共匹配 N+1 行
addr1, ~N 将匹配addr1和addr1后面的行,直到输入行号为N的倍数的下一行

2.4 sed正则表达式

2.5 sed操作指令

sed 操作命令告诉 sed 如何处理由地址指定的各输入行。如果没有指定地址, sed 就会处理输入的所有的行。

命 令 说 明
a\ 在当前行后添加一行或多行
c\ 用新文本修改(替换)当前行中的文本
d 删除行
i\ 在当前行之前插入文本
h 把模式空间里的内容复制到暂存缓存区
H 把模式空间里的内容追加到暂存缓存区
g 取出暂存缓冲区里的内容,将其复制到模式空间,覆盖该处原有内容
G 取出暂存缓冲区里的内容,将其复制到模式空间,追加在原有内容后面
l 列出非打印字符
p 打印行
n 读入下一输入行,并从下一条命令而不是第一条命令开始处理
q 结束或退出 sed
r 从文件中读取输入行
对所选行意外的所有行应用命令
s 用一个字符串替换另一个

2.6 替换标志

g 在行内进行全局替换
p 打印行
w 将行写入文件
x 交换暂存缓冲区与模式空间的内容
y 将字符转换为另一字符(不能对正则表达式使用 y 命令)

3. 实际需求举例 / 实战学习

3.1 打印:p命令

命令 p 是打印命令,用于显示模式缓存区的内容。默认情况下, sed 把输入行打印在屏幕上,选项-n 用于取消默认打印操纵。当选项-n 和命令 p 同时出现时, sed 可打印选定的内容

3.2 删除: d 命令

命令 d 用于删除输入行。sed 先将输入行从文件复制到模式缓存区,然后对该行执行 sed命令,最后将模式缓存区的内容显示在屏幕上。如果发出的是命令 d,当前模式缓存区的输入行会被删除,不被显示。

1> 删除单行

2> 删除多行

3.3 替换: s 命令

命令 s 是替换命令。替换和取代文件中的文本可以通过 sed 中的 s 来实现, s 后包含在斜杠中的文本是正则表达式,后面跟着的是需要替换的文本。可以通过 g 标志对行进行全局替换。

说明:s 命令用于替换。命令末端的 g 表示在行内全局替换;也就是说如果每一行里出现多个west,所有的 west 都会被替换为 north。如果没有 g 命令,则只将每一行的第一个west 替换为 north。

3.4 指定行的范围:逗号

行的范围从文件中的一个地址开始,在另一个地址结束。地址范围可以是行号(例如5,10),正则表达式(例如/Dick/和/Joe/),或者两者的结合(例如/north/,$)范围是闭合的——包含开始条件的行,结束条件的行,以及两者之间的行。如果结束条件无法满足,就会一直操作到文件结尾。如果结束条件满足,则继续查找满足开始条件的位置,范围重新开始。

1>行号指定范围

2>正则表达式指定范围

3.5 多重编辑: e 命令

选项-e 用于进行多重编辑。第一重编辑编辑删除第 1~3 行。第二重编辑将Jack 替换为 Billion.因为是逐行进行这两行编辑(即这两个命令都在模式空间的当前行上执行),所以编辑命令的顺序会影响结果。

3.6 追加: a 命令

a 命令是追加命令,追加将新文本到文件中当前行(即读入模式的缓存区行)的后面。不管是在命令行中,还是在 sed 脚本中, a 命令总是在反斜杠的后面。

在100的后面加上Hello。

3.7 插入: i 命令

i 命令是插入命令,类似于 a 命令,但不是在当前行后增加文本,而是在当前行前面插入新的文本,即刚读入缓存区模式的行。

3.8 修改: c 命令

c 命令是修改命令。 sed 使用该命令将已有的文本修改成新的文本。旧文本被覆盖。

c 命令是修改命令。该命令将完整地修改在模式缓冲区行的当前行。如果模式 Bill被匹配, c 命令将其后的文本替换包含 Bill 的行。

3.9 退出: q 命令

q 命令表示退出命令。该命令将导致 sed 程序退出,且不再进行其他的处理。

打印完第 5 行之后, q 让 sed 程序退出

参看链接:

https://www.cnblogs.com/ginvip/p/6376049.html

https://www.yiibai.com/sed/sed_strings.html

https://blog.csdn.net/yue_2018/article/details/89784442



相关文章
|
6月前
|
Perl
sed的用法
sed的用法
62 2
|
6月前
|
Unix Perl
sed的具体用法
sed的具体用法
50 2
|
6月前
|
Perl
sed的复杂用法
sed的复杂用法
84 2
|
Linux BI Perl
awk指令用法详解
awk指令用法详解
167 0
|
Perl
makefile中sed替换指令
makefile中sed替换指令
235 0
|
Perl
sed 基本用法
sed 基本用法
93 0