sed 你还知道吗?

sed:linux中的流编辑器,全名stream editor.与awk,vim并称linux的三大处理器。将文本内容放到内存中,处理之后在显示出来。

语法:sed [option]  'addresscommand'   操作对象

对语法的解释:

1.address:

1)startline,endline    从startline开始到endline结束。 ---->'1,20'

2)使用正则表达式   ------->/^root/

/模式1/,/模式2/   --------->从第一次被模式1匹配到的行开始到第一此被模式2行匹配到的行结束

3)linenum      ---------->指定特定的行,$表示最后一行

4)startline,+N     ----------->从startline行开始,往后N行

2.command

1) d    删除符合条件的行    

2) p  显示符合条件的行   -------->如果不加-n,匹配的行会显示两次

3) a  \string    在指定的行后面添加内容

4) i  \string     在指定行前面添加内容

5) r 文件名     将文件内容添加到指定行的位置

6)  w  文件名  将指定内容另存为文件名

7)  s   查找替换,s/pattern/string/[g/i]

默认按情况下只匹配每行的第一个匹配到的进行替换或者修改,g全局替换查找,i忽略大小写

8) 分组:将文中的love变成lover,将like变成liker

sed  ‘s#l..e#&r#g   文件名  或者   sed  ‘s#\(l..e\)#\1r#g 

3.option----->该选项可以省略。

1) -n  静默模式,只显示匹配到的内容

2) -i   直接修改源文件(操作需谨慎)

3) -r   支持扩展正则表达式

eg:删除文件中以空格开始后面有#的这些字符: sed -r 's/^[[:space:]]+#//' /etc/inittab


实例sed:

取出一个文件路径的目录名称:

echo '/etc/systemd/network/' | sed -r 's@^(/.*/)[^/]+/?@\1@g'

取出文件路径中基名:

echo '/etc/systemd/network/' | sed -r 's@^/.*/([^/]+)/?@\1@g'

10439291-5f5929d410da84b1.png
sed实操

猜你喜欢

转载自blog.csdn.net/weixin_33810302/article/details/87090319
sed