linux之文本内容替换命令sed
sed简介:流编辑工具,用来对文本进行过滤与替换操作。
sed流程:sed通过一次仅读取一行内容来对某些指令进行处理后输出。
1、sed通过文件或管道读取文件内容,但sed默认并不直接修改源文件,而是将读入的内容复制到缓冲区中,称之为模式空间。
2、所有的指令操作都是在模式空间找那个进行
3、sed根据相应的指令对模式空间中的内容进行处理并输出结果,默认输出至标准输出(即屏幕上)。
image.png
sed基本语法格式:
用法:sed[选项]...{脚本指令}[输入文件]...
选项: -version 显示sed版本
-help :显示帮助文档
-n,-quiet,-silent静默输出,默认情况下,sed程序在所有的脚本指令执行完毕后,将自动打印模式空间中的内容。
-e script允许多个脚本指令被执行
-f script-file从文件中读取脚本指令,对编写自动化脚本程序很实用
-i ,-in-place 该选项直接修改源文件
-l N 该选项指定l指令可以输出的行长度,l指令为输出非打印字符。
-posix 禁用GNU sed扩展功能。
-r 在脚本指令中使用扩展正则表达式。
-s,-separate 默认情况下,sed将把输入的多个文件名作为一个长的连续的输入流。而GNU sed则允许把它们当作单独的文件。
-u,-unbuffered 最低限度的缓存输入与输出
a,append表示追加指令;
i,insert表示插入指令;
d,delete表示删除指令;
s,substitution表示替换指令。
sed脚本指令的基本格式是:
[地址,即路径]命令(有些命令仅可以对一行操作,有些可以对多行操作),命令也可以用花括号进行组合,使命令序列可以作用于同一个地址。
address{
command1
command2
command3
}
比如:
sed '2a TYPE=Ethernet' test.txt #第二行后追加TYPE=Ethernet
sed '3i TYPE=Ethernet' test.txt #第二行前追加TYPE=Ethernet
sed 's/yes/no/g' test.txt #将样本文件中的所有yes替换为no
sed '3,4d' test.txt # 删除第三、第四行的内容
将样例文本中的第二个<body>替换为</body>,编写sed脚本,即将body替换为/body,但仅替换第二个body
cat sed.sh内容如下:
/body/{
s::\/body:2
}
执行sed命令: sed -f sed.sh test.txt
行编辑器介绍
- Vim和sed awk的区别
交互式与非交互式
文件操作模式与行操作模式 - sed的基本用法演示
sed :一般用于对文本内容做替换,sed '/user1/s/user1/u1/' /etc/paswd
sed的基本工作方式
sed的基本工作方式是:
- 将文件以行为单位读取到内存(模式空间)
- 使用sed的每个脚本对该行进行操作
- 处理完成后输出该行
sed的替换命令s
sed的替换命令s:
- sed 's/old/new' filename
- sed -e 's/old/new' -e 's/old/new' filename
- sed -i 's/old/new' 's/old/new' filename
带正则表达式的替换命令s:
sed 's/正则表达式/new' filename
sed -r 's/扩展正则表达式/new/' filename
sed的替换命令的加强版
1、全局替换 : s/old/new/g ,其中g为全局替换,用于替换所有出现的次数; /如果和正则匹配的内容冲突可以使用其他符号,如 :s@old@new@g
2、标志位
- 表示数字,第几次出现才进行替换,如 :
s@old@new@2
- g 表示全局替换,如 :
s@old@new@g
- p打印模式空间的内容
sed -n 'script' filename 阻止默认输出
- w file将模式空间的内容写入到文件
寻址
分组
sed脚本文件
sed的多行模式
为什么要有多行模式: 配置文件一般有单行出现,但也有使用json或XML格式的配置文件,为多行出现。
多行模式处理命令N、D、P
- N: 将下一行加入模式空间
-D: 删除模式空间中的第一个字符到第一个换行符
-P: 打印模式空间中的第一个字符到第一个换行符