shell中sed命令用法
一、sed命令解析1、sed工具概述Stream EDitor,流式编辑器- 非交互,基于模式匹配过滤及修改文本- 逐行处理,并将结果输出到屏幕-可实现对文本的输出、删除、替换、复制、剪切、导入、导出等操作2、命令格式解析主要用法:- 格式1:前置命令 | sed [选项] '编辑指令'- 格式2:sed [选项] '编辑指令' 文件 .. ..条件,可以是行号或 ...
一、sed命令解析
1、sed工具概述
Stream EDitor,流式编辑器
- 非交互,基于模式匹配过滤及修改文本
- 逐行处理,并将结果输出到屏幕
- 可实现对文本的输出、删除、替换、复制、剪切、导入、导出等操作
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替换为AB
sed 's/123/456/2' file.txt #将每行中第二个123替换为456
sed 's/123/XXX/g' file.txt #将所有的123替换为XXX
sed 's/123//g' file.txt #将所有的123都删除(替换成空字符串)
sed '6,8s/^/#/' file.txt #为6-8行加注释
sed 's/^#\*/\*/' file.txt #去掉开头为#*的#号
注意:此案例只做输出不修改原文件(修改原文件需要加-i选项)
4、替换行(c)
sed 'c 123456' file.txt #将所有行内容替换为123456
sed '/IPADDR/c IPADDR=10.0.0.0' file.txt #筛选IPADDR关键字的行,替换
sed '/#/c fileroot' file.txt #替换包含#号的行替换
sed '3c xxxxx' 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/i abc' test.txt #在包含aaa的行前插入单行文本
sed '/aaa/i abc\n###' test.txt #在包含aaa的行前插入2行文本,多行需要加换行符\n
注意:此案例只做输出不修改原文件(修改原文件需要加-i选项)
3、行后追加(a)
sed '2a ######' test.txt #在第2行后追加单行文本
sed '/aaa/a abc' test.txt #在包含aaa的行后追加单行文本
sed '/aaa/a abc\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 'w copy_test.txt' test.txt #将test文件所有内容另存为一个新文件
sed '/AAA/w AAA_test.txt' test.txt #将test文件中包含AAA的行另存为新的文件
sed '2,3w line.txt' test.txt #将test文件的2-3行另存为新的文件

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。
更多推荐
所有评论(0)