Sed命令初探

sed 是一个流编辑器 先将匹配到的内容放到模式空间(内存)当中,再对模式空间里面的内容进行编辑,并输出到屏幕;
默认是不会修改源文件的,只对内存当中的内容进行编辑
可以对数据进行替换/删除/添加/提取等工作;

sed 的格式:

sed的语法是
sed [范围] [操作命令] file
当:
不指定范围时,对全文进行操作
指定范围操作方法:
1.直接写数字,表示对多少行进行操作
sed '2d' file ,删除第二行
sed '$d' file ,删除最后一行
2.使用正则表达式
sed '/^root/d' file ,删除开头为root的行
以上为对单行进行操作,我们可以操作多行
sed '1,4d' file ,删除第一行到第四行
以字符锚定行
sed '/root/,/rsync/d' file ,删除root开始到rsync结束的行

sed同时执行多条命令

sed 'command1;command2 ...' file

选项:
-n 表示不显示模式空间内容
-i 表示直接修改原文件
-r 表示支持扩展正则表达式

Address:
1. 起始行,结束行 比如 '1,3' $表示最后一行;
2. /正则表达式/ 比如 /^root/
3. /正则1/,/正则2/ 比如 /^root/,/^student/ 表示从root开头的行到student开头的行;
4. 10 表示 第10行
5. 起始行,+N 比如 '10,+5' 表示从第10行开始,向下5行
6. = 可以显示第几行

Command :
d 删除行
p 打印
a\字符串 在指定行后面追加字符串内容
i\字符串 在指定行前面增加新的行内容;
r文件名 将文件的内容添加到指行;
w文件名 将指定的内容另存到指定的文件中
s/正则/字符串/g 替换正则匹配到的字符串
c 替换行 sed '1c1root/bin/nologin' passwd

 

[root@desktop0 ~]# sed '/disable/s/yes/no/g' /etc/xinetd.d/tftp

以/etc/passwd为例

1、删除文件每行的第一个字符
[root@server0 ~]# sed 's/^.//g' /etc/passwd

2、删除文件每行的第二个字符
[root@server0 ~]# sed -nr 's/(.)(.)(.*)/\1\3/p' /etc/passwd

3、删除文件每行的最后一个字符
[root@server0 ~]# sed -nr 's/(.*)(.)$/\1/p' /etc/passwd

4、删除文件每行的倒数第二个字符
[root@server0 ~]# sed -nr 's/(.*)(.)(.)$/\1\3/p' /etc/passwd

5、显示出文件中的第一个单词
[root@server0 ~]# sed -nr 's/(^[a-z]+)(.*)/\1/p' /etc/passwd

6、删除第一个单词
[root@server0 ~]# sed -nr 's/(^[a-z]+)(.*)/\2/p' /etc/passwd

7、删除第二个单词
[root@server0 ~]# sed -nr 's/(^[a-z]+)([^a-z]+)([a-z]+)(.*)/\1\2\4/p' /etc/passwd

8、删除每行倒数第二个单词
[root@server0 ~]# sed -nr 's/(.*)([^a-z]+)([a-z]+)([^a-z]+)([a-z]+)$/\1\2\4\5/p' /etc/passwd

9.删除/root/file1文件中行首的空白符;

sed 's/[[:space:]]//g' sss.txt | sed '/^$/d'

10. 替换/etc/yum.conf文件中“gpgcheck=1” 一行中的数字为0
[root@server0 ~]# sed -i 's/(gpgcheck\=)([1-9])/\10/p' /etc/yum.conf

11.删除/etc/grub.conf文件的空白行;
[root@server0 ~]# sed '/^$/d' /etc/grub.conf

12. 删除/etc/ssh/sshd_config文件第17到第20行的开头的#号;
[root@server0 ~]# sed '17,20 s/^#//g' /etc/ssh/sshd_config

13.取出一个文件路径/etc/yum/的父目录名称;
[root@server0 ~]# echo "/etc/yum" | sed -r 's#^(/.*)(/.*)#\1#g'
/etc

[root@server9 ~]# sed '1s/^./#&/' passwd

//第一行的单词前添加#号。(添加注释)

上一篇
下一篇