一、sed命令解析
1、sed工具概述
StreamEDitor,流式编辑器
-非交互,基于模式匹配过滤及修改文本
-逐行处理,并将结果输出到屏幕
-可实现对文本的输出、删除、替换、复制、剪切、导入、导出等操作
2、命令格式解析
主要用法:
-格式1:前置命令|sed[选项]'编辑指令'
-格式2:sed[选项]'编辑指令'文件....
条件,可以是行号或/正则/:
-行号可以使用单个数字表示单行
-或者3,5表示连续的多行
-省略条件,则默认逐行处理全部文本
-匹配正则时,需要使用//
常见命令选项:
选项 | 释义 |
---|
-n | 屏蔽默认输出 |
-i | 直接修改源文件 |
-r | 支持扩展正则 |
二、常见处理操作示例
1、输出文本(p)
sed-n'/^123/p'file.txt#仅列出123开头的行sed-n'4p'file.txt#输出第4行sed-n'2,4p'file.txt#输出第2-4行sed-n'p'file.txt#输出全部sed-n'/ab/p'file.txt#输出包含root的行sed-n'$='file.txt#输出文件的行数sed-n'1~2p'file.txt#打印奇数行sed-n'2~2p'file.txt#打印偶数行2、删除文本(d)
sed'2,4d'file.txt#删除第2-4行sed'/ab/d'file.txt#删除所有包含ab的行sed'/ab/!d'file.txt#删除不包含ab的行,!符号表示取反sed'/^file/d'file.txt#删除开头为file的行sed'$d'file.txt#删除文件的最后一行sed'/^$/d'file.txt#删除所有空行注意:此案例只做输出不修改原文件(修改原文件需要加-i选项)3、替换关键词(s)
sed's/ab/AB/'file.txt#将每行中第一个ab替换为ABsed's/123/456/2'file.txt#将每行中第二个123替换为456sed's/123/XXX/g'file.txt#将所有的123替换为XXXsed's/123//g'file.txt#将所有的123都删除(替换成空字符串)sed'6,8s/^/#/'file.txt#为6-8行加注释sed's/^#\*/\*/'file.txt#去掉开头为#*的#号注意:此案例只做输出不修改原文件(修改原文件需要加-i选项)4、替换行(c)
sed'c123456'file.txt#将所有行内容替换为123456sed'/IPADDR/cIPADDR=10.0.0.0'file.txt#筛选IPADDR关键字的行,替换sed'/#/cfileroot'file.txt#替换包含#号的行替换sed'3cxxxxx'file.txt#替换第三行内容注意:此案例只做输出不修改原文件(修改原文件需要加-i选项)三、sed文本块处理
1、文本块处理动作
操作符 | 用途 | 指令示例 |
---|
i | 行前插入文本 | 2iYY在第2行之前添加文本行“YY” 4,7iYY在第4-7行的每一行前添加文本行 |
a | 行后插入文本 | 2aYY在第2行之后添加文本 /^XX/aYY在以XX开头的行之后添加文本 |
r | 导入指令 | 2cYY将第2行的内容修改为"YY" |
w | 文件另存为|导出文件内容 | |
2、行前插入(i)
sed'2i######'test.txt#在第2行前插入单行文本sed'/aaa/iabc'test.txt#在包含aaa的行前插入单行文本sed'/aaa/iabc\n###'test.txt#在包含aaa的行前插入2行文本,多行需要加换行符\n注意:此案例只做输出不修改原文件(修改原文件需要加-i选项)3、行后追加(a)
sed'2a######'test.txt#在第2行后追加单行文本sed'/aaa/aabc'test.txt#在包含aaa的行后追加单行文本sed'/aaa/aabc\n###'test.txt#在包含aaa的行后追加2行文本,多行需要加换行符\n注意:此案例只做输出不修改原文件(修改原文件需要加-i选项)4、导入(r)
sed'2r/root/file.txt'test.txt#在第二行之后导入file.txt文本到test.txt文件sed'r/root/file.txt'test.txt#在每一行后导入file.txt文本到test.txt文件sed'/AAA/r/root/file.txt'test.txt#在包含AAA的行后导入file.txt文本到test.txt文件注意:此案例只做输出不修改原文件(修改原文件需要加-i选项)5、导出(w)
sed'wcopy_test.txt'test.txt#将test文件所有内容另存为一个新文件sed'/AAA/wAAA_test.txt'test.txt#将test文件中包含AAA的行另存为新的文件sed'2,3wline.txt'test.txt#将test文件的2-3行另存为新的文件