sed(stream editor)是一种非交互式的流编辑器。sed操作只是对"流"按行进行处理,并不会修改原文件。
ps:若需要生成新文件,则使用重定向将"流"输出到指定文件,或者使用"-i"参数对原文件直接修改。
sed -i '2d' test.txt //-i 对源文件进行修改
sed '2d' test.txt > new.txt //删除第二行内容后的输出流保存到新文件new.txt
sed命令对文件内容输出流增删改操作
增加内容
1.直接插入文本
使用 i 或者 a 插入文本,i 表示匹配行之前插入,a 表示匹配行之后插入
$sed '2 i insert' test.txt //在第二行之前插入
line 1
insert
line 2
line 3
line 4
line 5
$sed '2 a insert' test.txt //在第二行之后插入文本
line 1
line 2
insert
line 3
line 4
line 5
$sed '$ a insert' test.txt //$表示最后一行,在最后一行后插入文本
line 1
line 2
line 3
line 4
line 5
insert
$sed '/line 2/ i insert' test.txt //使用正则/line 2/匹配内容的匹配行前插入文本
line 1
insert
line 2
line 3
line 4
line 5
2.以读取文件输出流插入文本
使用r命令在指定行或者匹配行后将读取的文件流动插入文本
$sed '$ r output.txt' test.txt 将output.txt内容插入到最后一行后
line 1
line 2
line 3
line 4
line 5
output
doc
由以上两个插入文本的命令不难发现,对于sed命令插入文本
首先是先设定插入行(指定行数或者匹配行)
然后设定插入方式(后插前插)
最后是插入内容(字符串或者文本输出流,文本输出流就调整第二个参数为r)
删除内容
删除内容是增加内容的反过程,使用d命令
先指定行(直接指定行号范围或者正则匹配行)
配合d命令进行删除
sed '2d' test.txt //删除第二行内容
sed '1,2d' test.txt //删除第一行到第二行
sed '2,$d' test.txt //删除第二行到最后一行
sed '2!d' test.txt //只保留第二行数据
sed '1,2!d' test.txt //只保留第一、二行数据
sed '/line/d' test.txt //含有line的行删除
sed '/^$/d' test.txt //删除空行,正则/^$/代表空
修改内容
1.整体文本替换
s命令将匹配内容进行替换
首先指定s命令
然后指定匹配内容
然后指定替换内容
最后指定替换次数(以行为单位,每行匹配到的第几个内容被替换,默认为第一个,使用g表示所有)
$sed 's/line/Line/' test.txt //每行匹配内容line的第一个替换为Line
Line__line 1
Line__line 2
Line__line 3
Line__line 4
Line__line 5
$sed 's/line/Line/2' test.txt //每行匹配内容line的第二个替换为Line
line__Line 1
line__Line 2
line__Line 3
line__Line 4
line__Line 5
$sed 's/line/Line/g' test.txt //使用g表示匹配内容全部替换
Line__Line 1
Line__Line 2
Line__Line 3
Line__Line 4
Line__Line 5
2.字符转换
y命令逐个字符匹配转换,默认全文本全部替换
sed 'y/li/ya/' test.txt //逐个字符匹配,l替换为y,i替换为a
yane__yane 1
yane__yane 2
yane__yane 3
yane__yane 4
yane__yane 5
sed多命令处理方式
1.直接的方式
在sed命令后其实是有-e参数的只是进行了省略
sed -e '2d' text.txt //等价于 sed -e '2d' text.txt
sed -e '2d' -e '1 a insert' text.txt //当使用多个参数命令时 -e 不允许丢弃
sed -e '2d' -e '1 a insert' text.txt //等价于sed -e '2d;1 a insert' text.txt 使用;分割多个命令
$sed '2d;1 a insert' test.txt
line__line 1
insert
line__line 3
line__line 4
line__line 5
2.sed脚本的使用
命令很多,直接打在控制太很不方便,则建议先些sed的脚本
使用-f 指定脚本文件为参数,编辑目标文本
ps:脚本文件后缀任意定义,单最好统一后缀方便查找
$cat sed.rules //sed脚本
2d
3 i insert
$ a last
$sed -f sed.rules test.txt //以sed脚本处理test.txt
line__line 1
insert
line__line 3
line__line 4
line__line 5
last
$mv sed.rules sed.sed
$sed -f sed.sed test.txt //任意文件后缀都可以
line__line 1
insert
line__line 3
line__line 4
line__line 5
last








网友评论