sed是一种非交互式的流编辑器,通过多种转换修改流经它的文本。
命令格式如下:
sed [options] 'command' file
options是sed可以接受的参数
command是sed的命令集(一共有25个)
sed默认不修改源文件,如果希望保存修改后的文件可使用重定向:sed '1d' sed.txt > saved_file
使用-i参数直接修改源文件:sed -i '1d' sed.txt
使用w命令将结果保存到外部指定文件:sed -n '1,2 w output' sed.txt
使用-e参数和分号可以连接多编辑命令
sed -e 's/this/that/g' -e 's/line/LINE/g' sed.txt
sed 's/this/that/g;s/line/LINE/g' sed.txt
使用-d命令可删除指定的行
删除第一行:sed '1d' sed.txt
删除指定范围的行(第一行到第三行):sed '1,3d' sed.txt
删除指定范围的行(第一行到最后行):sed '1,$d' sed.txt
删除最后一行:sed '$d' sed.txt
删除除指定范围以外的行(只保留第五行):sed '5!d' sed.txt
删除所有包含empty的行:sed '/empty/d' sed.txt
删除空行:sed '/^$/d' sed.txt
使用s命令进行匹配替换
每行第一个line替换:sed 's/line/LINE/' sed.txt(默认只替换第一次匹配的内容)
每行最多匹配修改2个line:sed 's/line/LINE/2' sed.txt
使用g命令完成所有匹配值替换:sed 's/line/LINE/g' sed.txt
只替换开头的this为that:sed 's/^this/that/' sed.txt
使用n命令读取匹配行的下一行
将空白行的下一行的line改成LINE:sed '/^$/{n;s/line/LINE/g}' sed.txt
使用y命令进行字符转换
将文件file中的O转换为N,L转换为E,D转换为W:sed 'y/OLD/NEW/' sed.txt
将数字1转换为A,2转换为B,3转换为C,4转换为D:sed 'y/1234/ABCD/' sed.txt
注意:转换字符和被转换字符长度要相等
使用i或a命令插入文本,i是匹配行之前插入,a是匹配行之后插入
在第二行前插入文本:sed '2 i insert' sed.txt
在第二行后插入文本:sed '2 a insert' sed.txt
在匹配行的上一行插入:sed '/second/i\insert' sed.txt
使用r命令从其他文件中读取文件,并插入匹配行之后
将/etc/passwd中的内容读取并放到sed.txt空行之后:sed '/^$/r /etc/passwd' sed.txt
使用p命令可进行打印,加-n参数表示不打印没关系的行
打印文件指定的行:sed -n '1p' sed.txt
打印实际处理过的行:sed -n 's/the/THE/p' sed.txt
sed脚本
脚本示例:将全文的this改成that,并删除所有空行
cat sed.rules
s/this/that/g
/^$/d
使用-f参数指定该脚本并应用于sed.txt
sed -f sed.rules sed.txt
| sed常用命令 | 作用 |
|---|
| a | 在匹配行后加入文本 |
| c | 字符转换 |
| d | 删除行 |
| D | 删除第一行 |
| i | 在匹配行前面加入文本 |
| h | 复制模板块的内容到存储空间 |
| H | 追加模板块的内容到存储空间 |
| g | 将存储空间的内容复制到模式空间 |
| G | 将存储空间的内容追加到模式空间 |
| n | 读取下一个输入行,用下一个命令处理新的行 |
| N | 追加下一个输入行到模版块后并在二者间插入新行 |
| p | 打印匹配的行 |
| P | 打印匹配的第一行 |
| q | 退出sed |
| r | 从外部文件中读取文本 |
| w | 追加写文件 |
| ! | 匹配的逆 |
| s/old/new | 用new替换正则表达式old |
| = | 打印当前行号 |
| sed常用参数 | 作用 |
|---|
| -e | 多条件编辑 |
| -h | 帮助信息 |
| -n | 不输出不匹配的行 |
| -f | 指定sed脚本 |
| -V | 版本信息 |
| -i | 直接修改源文件 |