希望能帮助到大家!
1、sed命令概述
sed:文本编辑工具(非交互式) 流编辑器
sed优点:1.不会导致内存不足
2. sed 是一个<非交互式>的<字符流编辑器>
3.Sed 不是在<源输入>上直接进行处理的
2、sed命令语法:
sed [options] script filename
sed [选项] '地址命令'(模式匹配) 文件名
3、常用选项:
-r 启用扩展正则表达式
-e 执行多个脚本(动作)
-n 抑制:sed命令的<标准输出>
-i 直接修改源文件
注意:不要同时使用<-n 和 -i>选项,否则,<源文件>的内容将受到极大的破坏
4、地址定位(模式匹配)(哪些行需要处理)
匹配地址两种方式:行数和正则
1)通过行数匹配范围
单独行数:n (指定单独行数 $表示最后一行)
输出文件第3行:sed -n '3p' 1.txt
范围: n,m (指定n行到m行)
输入文件第1行到第3行 sed -n '1,3p' 111.txt
起始行~步长 ()
如:2~2 从第2行开始,每隔1行(2,4,6,8.....)
起始位置,+N 如:3,+5 处理3-8行
2)通过正则来匹配范围
/正则/,/正则/ 第一个正则不存在,不会匹配任何信息
第二个正则不存在,一直匹配到结尾
5.动作(子命令)
p 打印 (需要加-n选项)
! 取反 (放在命令前)
例:输入除了1到2行的内容:sed -n '1,2!p' 3.txt
d 删除 (不需要加-n选项)
例:删除2到4行:sed '2,4d' 3.txt
i;插入内容
sed ‘地址(/正则/)i\插入的内容’文件名
例:在3.txt文件中1开的行前插入一行aaa的内容
sed '/^1/i\aaa' 3.txt
多行内容可以添加换行符:\n
a:追加内容
sed ‘地址(/正则/)a\追加的内容’文件名
sed '/^1/a\bbb' 3.txt
c:修改内容
sed ‘地址(/正则/)c\替换匹配范围的内容’文件名
s:查找并替换
语法:sed '模式匹配s/被替换的内容/替换以后的内容/' 文件
's///'
注意:子命令i、a、c放在匹配后,s放在匹配前
例:将ssh服务端口88换成89号端口
sed 's/88/89/' /etc/ssh/sshd_config (直接修改源原件 sed -i)
注意:s默认情况下只会替换每行第一个匹配的内容
修饰符:g(全局替换)每行出现的所有的匹配内容都会被替换
例:sed 's/1/a/' 2.txt 只会把每行的第一个1替换成a
sed 's/1/a/g' 2.txt 会把每行的所有的1都替换成a
选定替换的范围(模式匹配)
sed '1,3s/1/a/g' 2.txt 把1到3行的所有的1都替换成a
n(数字):指定每行替换第几个
i: 替换时忽略原内容的大小写
sed '1,3s/a/1/gi' 2.txt 把1到3行的所有的a和A都替换成1
&:引用原内容里匹配的所有内容
了解:y 替换(新旧字符长度一致)
r:将指定的文件添加到指定的位置
sed '地址r 要导入的文件' 正在编辑的文件
w:将地址指定的范围内的行另存至其他指定文件中