sed(Stream Editor)是一个流编辑器。对标准输入或文件逐行进行处理。
sed的基本选项
-n 只打印模式匹配行
-e 直接在命令行进行sed编辑,默认选项
-f 编辑动作保存在文件中,指定文件执行
-r 支持扩展正则表达式
-i 直接修改文件内容
基础功能
1.示例打印文件内容
设置一个文件,里面有三行数据
onetwo
goaway
network
语法:sed 'p' 文件 'p'相当于print,并不是查找内容为p相关的。
[root@localhost ~]# sed 'p' testone.txt
onetwo
onetwo
goaway
goaway
network
network
2.同一行会执行两次,这是sed机制的原因,相当于它先输出一次再执行一次指定的命令,所以下面有一个静默命令-n
语法:sed -n 'p' 文件
[root@localhost ~]# sed -n 'p' testone.txt
onetwo
goaway
network
3.查找相关内容并打印
语法:sed -n '/查找内容/p' 文件
[root@localhost ~]# sed -n '/k/p' testone.txt
network
4.多个匹配1
语法:sed -n -e '/查找内容1/p' -e '/查找内容/p' 文件
[root@localhost ~]# sed -n -e '/onetwo/p' -e '/network/p' testone.txt
onetwo
network
5.多个匹配写法2
语法:sed -n -r '/条件1|条件2/p' 文件 | 或符号 -r为拓展正则表达式
[root@localhost ~]# sed -n -r '/onetwo|network/p' testone.txt
onetwo
network
6.指定文件规则读取匹配
语法:sed -n -f 匹配规则文件 被查找文件 -file
role.sed 为规则文件 内容为 /onetwo/p
[root@localhost ~]# sed -n -f role.sed testone.txt
onetwo
7.替换文件匹配内容,并打印(不修改文件)
语法:sed -n 's/原始内容/替换内容/g;p' 文件 s为全部行 g为全部替换
[root@localhost ~]# sed -n 's/one/two/g;p' testone.txt
twotwo
goaway
network
8.替换文件匹配内容(修改文件)
语法:sed -i 's/原始内容/替换内容/g' 文件 s为全部行 g为全部替换
[root@localhost ~]# sed -i 's/one/two/g;p' testone.txt
9.占位符匹配
sed -i 's/da...dan/congminggui/' test.txt ...为站位符与sql_一致
.*为任意字符 例 [.*]表示方框内任意内容的匹配
10.反向引用
sed -i 's/da...dan/&zhencongming/' test.txt
&代表引用之前的匹配结果,&zhencongming代表往原有匹配结果后拼接并替换
11.拓展一下脚本调用取值
[root@localhost ~]# test()
> {
> sed -n '/go/p' testone.txt
> }
[root@localhost ~]# e=$(test)
[root@localhost ~]# echo ${e}
goaway
匹配拓展
匹配指定行
sed -n '1p' testone.txt 打印第一行
匹配指定多行
sed -n '1,2p' testone.txt 打印一到二行
匹配指定多行
sed -n '1,+1p' testone.txt 从第一行开始再增加指定行
匹配指定开头的行
sed -n '/^two/p' testone.txt /^内容/
指定文字区间的匹配
sed -n '/rui123/,/sar/p' test.txt 从rui123行到sar的行结束
指定行到匹配的区配
sed -n '1,/123jiu/p' test.txt 从1行到匹配到123的行结束
指定匹配行到指定行
sed -n '/123jiu/,3p' test.txt 从匹配到123jiu到3的行结束
编辑命令对照表
查询 p 打印
增加 a 行后追加
i 行前追加
r 外部文件读入,行后追加
w 匹配行写入外部文件
删除 d 删除
修改 s/old/new 将行内第一个old替换为new
s/old/new/g 将行内全部old替换为new
s/old/new/2g 将行内前两个old替换为new
s/old/new/ig 将行内old全部替换为new,忽略大小写
删除匹配行
单行删除
sed -i '/i1owo/d' test.txt
多行(根据匹配下语句为从abc开头到包含789的第一个结果行区间进行删除)
sed -i '/^abc/,/789/d' test.txt
追加内容
向后追加(符合条件默认全部追加)
sed -i '/908/a hello sola!' test.txt 在包含908内容的行后增加行
向前追加(符合条件默认全部追加)
sed -i '/908/i hello sola!' test.txt
指定文件内容向后追加
sed -i '/90894/r add.txt' test.txt r空格后填入文件路径
将匹配的内容存至其他文件
sed -i '/90894/w add1.txt' test.txt
修改文件内容
1.将文件中指定单行匹配的内容替换
语法: sed -i '1s/原文本/新文本' 文件 1s代表第几行
sed -i '1,5s/haotian/rui123/' test.txt
2.将文件中指定多行数匹配的内容替换
语法: sed -i '1,5s/原文本/新文本' 文件 1,5s代表1到5行
sed -i '1s/haotian/rui123/' test.txt
sed -i '/hao/s/hao/123/g' test.txt
4.将指定以内容开始的行,并包含指定内容的行进行文本替换(这里指的这中间的所有行)
语法:sed -i /^jiu/,/123/s/benben/congming/g 指定以jiu开头并且包含123的所有行进行替换
sed -i '/^jiu/,/123/s/benben/congming/g' test.txt