赞
踩
一.sed编辑器简介
Sed是从文件或管道中读取一行,处理一行,输出一行;再读取一行,再处理一行,再输出一行,直到最后一行。每当处理一行时,把当前处理的行存储在临时缓冲区中,称为模式空间(PatternSpace),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。一次处理一行的设计模式使得sed性能很高,sed在读取大文件时不会出现卡顿的现象。如果使用vi命令打开几十M上百M的文件,明显会出现有卡顿的现象,这是因为vi命令打开文件是一次性将文件加载到内存,然后再打开。Sed就避免了这种情况,一行一行的处理,打开速度非常快,执行速度也很快
二.sed工作流程
SED编辑器是一个流编辑器,主要用于对文本进行转换和编辑。它按照一系列的编辑命令逐行处理输入文本,并将结果输出到标准输出或指定的文件中。下面是SED编辑器的基本工作流程:
读取输入流:SED从标准输入或文件中读取文本数据,逐行处理。
执行编辑命令:对每一行文本,SED执行预定义的编辑命令或用户指定的编辑脚本。这些编辑命令可以是替换、删除、插入或其他文本转换操作。
应用编辑命令:SED根据编辑命令对当前行进行处理,并生成输出。如果没有指定编辑命令,则默认情况下,SED将原样输出文本。
输出结果:处理后的文本被发送到标准输出或者输出到指定的文件中,取决于用户的设置。
SED编辑器的工作流程可以通过命令行参数或者编辑脚本来控制。用户可以在命令行中指定编辑命令,也可以将编辑命令保存到脚本文件中,在需要时调用该脚本文件。SED提供了丰富的编辑命令,可以实现对文本的各种操作,如查找替换、删除行、插入文本等。
三.sed的基本语法
1.格式
sed [option] 'command' file
1.OPTION
:可选的参数,例如 -i
表示直接修改文件内容。
2."COMMAND"
:sed
命令,用于指定要执行的操作,例如搜索、替换等。
3.FILE
:要处理的文件名。
sed [option]... 'script;script;...' [input file...]
选项 自身脚本语法 支持标准输入管道
2.常用操作
s/pattern/replacement/flags
:替换命令,用于将匹配到的模式替换为指定的内容。
pattern
:要搜索的模式,可以是正则表达式。replacement
:要替换成的内容。flags
:可选的标志,例如 g
表示全局替换,i
表示大小写不敏感替换等。d
:删除命令,删除模式空间匹配的行,并立即启用下一轮循环。p
:打印命令,用于打印匹配到的行。i [\]text: 在行前面插入文本
a [\]text :在指定行后面追加文本,支持使用\n实现多行追加
c [\]text :替换行为单行或多行文本
w file : 保存模式匹配的行至指定文件
r file :读取指定文件的文本至模式空间中匹配到的行后
= :为模式空间中的行打印行号
! :模式空间中匹配行取反处理
q :结束或退出sed
3.常用选项
示例:
(1)默认将输入内容打印出来,系统自带自动打印
(2)sed -e 'p' :打印文件中的内容
(3)-n 选项禁止自动打印模式空间的内容,只有经过命令显式输出的行才会被打印。
与p一起使用可以打印出命令内容
(4)sed -n "="显示行号,sed -n "l" 显示特殊字符
(5)执行多个命令操作-e
4.sed命令格式
地址+脚本命令
(1)没有地址时:对全文进行处理(比如行号)
(2)单个地址
#:指定的行,$:最后一行
/pattern/:被此处模式所能够匹配到的每一行,正则表达式
(3)范围地址:
范围地址 | 解析 |
#p | #代表行号 打印第#行内容 |
#,# | 从#行到第#行,3,6 从第3行到第6行 |
#,+# | 从#行到+#行,3,+4 表示从3行到第7行 |
/pat1/,/pat2/ | 第一个正则表达式 到 第二个正则表达式之间的行 |
#,/pat/ | 从#号行为开始找到 pat为止 |
/pat/,# | 找到#号个pat为止 |
(4)步进:~
1~2:表示奇数行
2~2:表示偶数行
示例:
(1)打印第三行内容 sed -n "3p"
(2)打印第三行到第五行内容 sed -n "3,5p"
(3)打印文件最后一行的内容 sed -n "$ p"
(4)打印文件1-4行,2-5行内容 sed -n "1,+3p" ;sed -n "2,+3p"
(5)打印偶数行和奇数行
(6)从第二行开始到最后一行,n在前先加再打印
sed从第二行开始然后跳到下一行打印第三行
sed在第四行开始然后跳到下一行打印第五行
sed在第六行开始然后跳到下一行打印第七行
(7)过滤文件中含有root字符串的行 sed -n "/root/p"
(8)匹配文件中以root开头的行 sed -n "/^root/p"
(9)匹配文件中以bash结尾的行 sed -n "/^root/p"
(10)匹配文件中含有root和bash的行,扩展正则需要加-r, sed -n -r "/root|bash/p"
(11)匹配文件第二行开始到第一个含有root的行结束 sed -n -r "2,/root/p"
(12)匹配文件中含有 r..t 的行 ".."表任意两个字符 sed -n "/r..t/p"
(13)删除指定行
(14)删除空行和含有9的行
(5)从含有某个字符的行删除到含有另一个字符的行
四.搜索替代
格式:行范围 s/旧字符串/新字符串/替换标记
形式:s / / /;s@@@;s###
替换修饰符:
g :行内全局替换
p : 显示替换成功的行
w :将替换的结果写到文件中
I,i : 忽略大小写
示例:
(1)搜索替换,将每行第一个root替换为admin
sed -n 's/root/admin/p'
(2)搜索替换,将每行第二,三个root替换为admin
在文件内容的开头添加内容
格式:sed s/^/添加的内容/ 文件
示例:
(1)在passwd文件内容的开头添加“#”
(2)给含有root的行开头添加#注释
“$”代表前面匹配到的内容
整行替换
“c”替换行为单行或多行文本
格式:sed "#c 新内容" 文件名 //替换第#行的全部内容
sed "/旧内容/c 新内容" 文件名 //将被选到的含有旧内容的行替换为新内容
字符替换
格式:sed ' y/旧字符/新字符/ ' 文件名
添加行内容
行前添加
格式:sed '#i 添加的内容' 文件 //在第#行前添加一行内容,$i代表在最后一行前添加
行后添加
格式:sed '#a 添加的内容' 文件 //在第#行后添加一行内容,$a代表在最后一行后添加
示例:
插入文件内容
格式:sed '#r 文件2绝对路径' 文件1 //将文件2的内容在文件1的第#行下插入
剪切粘贴
H:复制 d:删除 G:粘贴
格式:
单行:sed 'n {H;d};#G' 文件名 //将第n行剪切粘贴到第#行后
多行:sed 'n,m {H;d};#G' 文件名 //将第n到m行剪切粘贴到第#行后
示例:
将第2-4行剪切粘贴到第5行后和将第2-4行剪切粘贴到最后一行
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。