sed [选项] [sed的内置命令] 执行文件
sed的原理:
从执行文件从按行读取数据,然后存储到sed的存储区,再通过匹配对应的数据,进行过滤或修改
#匹配失败,默认会输出到屏幕(可以取消);匹配成功则进行编辑(通过对应的策略,然后输出到屏幕)
选项:
-n 取消sed的默认输出,常与p命令一起使用
-i 直接将修改的结果写入文件(如果不用i,则默认修改的只是sed的内存数据,即:文件数据没有修改)
-e 多次编辑,不需要管道符
-r 支持扩展正则表达式
sed内置命令:
a 对文本追加操作,在指定行后添加一行/多行文本
d 对文本进行匹配删除操作
i 插入文本操作,在指定行前添加一行/多行文本
p 打印输出,通常p与-n一起使用
s/正则/替换内容/g 匹配正则,然后替换内容(支持正则),g代表全局匹配
sed的匹配范围:
1.空地址(全文处理)
2.单地址(指定文件某一行)
3./xxx/(被模式匹配到的每一行)
4.范围区间(10,20代表匹配十到二十行;10,+5第十行向下5行;/xxx1/,/xxx2/)
5.步长(1~2,表达1,3,5,7,9...行;2~2表示2,4,6,8...行)
sed匹配:
[root@control /]# cat nihao
ni hao
my name is lubo
nice to meet your
①sed的输出:
#输出nihao文件里面的2-5行文件(只输出这4行,如果没有4行也不会报错)
[root@control /]# sed "2,+5p" nihao -n
my name is lubo
nice to meet your
#输出nihao文件里面的含义a的行(只输出)
[root@control /]# sed "/a/p" nihao -n
ni hao
my name is lubo
#如果sed匹配时,没有带上-n则会输出两次匹配的行
[root@control /]# sed "/a/p" nihao
ni hao
ni hao
my name is lubo
my name is lubo
nice to meet your
②sed的删除:
删除nihao文件里面的含义a的行
[root@control /]# sed "/a/d" nihao
nice to meet your
[root@control /]# cat nihao
ni hao
my name is lubo
nice to meet your
#只使用sed则为删除数据缓存(sed的缓存区,而不是文本文件),如果需要真正的删除需要加上-i
[root@control ~]# sed '3,$d' /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
从/etc/passwd文件的第五行删到结尾(需要使用''而不是"")
[root@control /]# sed '2d' nihao
ni hao
nice to meet your
[root@control /]# sed '2,+1d' nihao
ni hao
#sed可以删除指定行和多余行
③sed的追加:
[root@control /]# sed '3a hehe' nihao
ni hao
my name is lubo
nice to meet your
hehe
#在第三行插入hehe
[root@control /]# sed '5a hehe' nihao
ni hao
my name is lubo
nice to meet your
#在第五行插入hehe,但是没有插入进去
④sed的插入:
[root@control /]# sed '2i shabi' nihao
ni hao
shabi
my name is lubo
nice to meet your
[root@control /]# sed '9i shabi' nihao
ni hao
my name is lubo
nice to meet your
#插入和追加一样,只是插入是在行之前加入内容,而追加是在之后
⑤sed的替换:
[root@control /]# sed 's/lubo/lsp/p' nihao
ni hao
my name is lsp
my name is lsp
nice to meet your
#此时带上p输出,则是会输出缓存中的数据
[root@control /]# sed 's/lubo/lsp/' nihao
ni hao
my name is lsp
nice to meet your
#没有带上p,则是输出已经匹配修改过的数据