首页 > 代码库 > sed 命令编辑文本

sed 命令编辑文本

1.sed 概述

  sed 是一个非交互式文本编辑器。它能够对文本文件和标准输入进行编辑,标准输入能够是来自键盘输入、文件重定向、字符串、变量。甚至来自于管道文本。

2.sed工作流程简述

  sed在处理文件的时候。从一个文本行或标准输入读取数据。被保存到在一个叫模式空间的暂时缓冲区中。除非被删除或者输出被取消,否则全部被处理的行在运行完sed命令后都将打印在屏幕上。接着模式空间被清空,并存入新的一行等待处理。

3.sed的缓冲区

  模式缓冲区:模式空间的缓冲区。被sed命令处理。

  保持缓冲区:与模式缓冲区数交换或者暂存,默认值为空行

  模式缓冲区与保持缓冲区的之间的命令有两类:替换和追加(替换命令为小写字母。追加命令为大写字母)

    替换:模式缓冲区 -> 保持缓冲区  h (将模式缓冲区的内容拷贝到保持缓冲区,替换保持缓冲的内容)

                保持缓冲区 -> 模式缓冲区  g

    追加: 模式缓冲区 -> 保持缓冲区 H(将模式缓冲区的内容追加到保持缓冲区)

                 保持缓冲区 -> 模式缓冲区 G 

4.sed调用方式和选项

  • sed [选项] ‘sed 命令‘ 输入文件  (命令行调用sed)
  • sed [选项] ‘sed 命令‘  -f sed脚本文件 输入文件  (sed命令插入脚本文件后。然后通过sed命令调用它)
  • 无论哪种调用方式,假设没有指定输入文件,sed将从标准输入中接受输入。
选项意义
-n禁止自己主动打印模式缓冲区
-e表示将下一个字符串解析为sed编辑命令
-f表示正在调用sed脚本文件


5.sed命令

   sed命令通常由两部分组成:定位文本行和sed编辑命令。

   1)定位文本行:使用行号,指定一行或指定行号范围。使用正表达式。

选项意义
xx为指定行号
x,y指定从x到y的行号范围
/pattern/查询包括模式的行
/pattern/pattern/查询包括两个模式的行
/pattern/,x从与pattern的匹配行到x号行之间的行
x,/pattern/从x号行到与pattern的匹配行之间的行
x,y!查询不包含x到y行号的行
 

           sed元字符集:

^

锚定行的開始 如:/^sed/匹配全部以sed开头的行。

$

锚定行的结束 如:/sed$/匹配全部以sed结尾的行。

.

匹配一个非换行符的字符 如:/s.d/匹配s后接一个随意字符,然后是d。

*

匹配零或多个字符 如:/*sed/匹配全部模板是一个或多个空格后紧跟sed的行。

[]

匹配一个指定范围内的字符,如/[Ss]ed/匹配sed和Sed。

[^]

匹配一个不在指定范围内的字符。如:/[^A-RT-Z]ed/匹配不包括A-R和T-Z的一个字母开头,紧跟ed的行。

\(..\)

保存匹配的字符。如s/\(love\)able/\1rs,loveable被替换成lovers。

&

保存搜索字符用来替换其它字符,如s/love/**&**/,love这成**love**。

\<

锚定单词的開始,如:/\<love/匹配包括以love开头的单词的行。

\>

锚定单词的结束,如/love\>/匹配包括以love结尾的单词的行。

x\{m\}

反复字符x。m次。如:/0\{5\}/匹配包括5个o的行。

x\{m,\}

反复字符x,至少m次,如:/o\{5,\}/匹配至少有5个o的行。

x\{m,n\}

反复字符x,至少m次,不多于n次,如:/o\{5,10\}/匹配5--10个o的行

  2)sed编辑命令
sed编辑命令表
选项意义
p打印匹配行
=打印文件行号
a\在定位行号之后追加文本信息
i\在定位行号之前插入文本信息
d删除定位行
c\用新文本替换定位文本(行)
s使用替换模式替换对应模式
r从还有一个文件里读取文本
w将文本写入到一个文件
y变换字符(以单个字符替换相应的字符)
q第一个模式匹配完毕后退出
{}在定位行运行命令组与 -e选项功能相近
n输出模式缓冲区行,读取下一行替换模式缓冲区行,运行下一条命令。并不是第一条命令
h模式缓冲区的文本拷贝到保持缓冲区
H模式缓冲区的文本追加到保持缓冲区
g保持缓冲区的文本拷贝到模式缓冲区
G保持缓冲区的文本追加到模式缓冲区
x互换模式缓冲区和保持缓冲区的内容


sed 命令编辑文本