sed基础用法整理
sed: Stream Editor 行编辑器
用法:
sed [Options] ‘AddressCommand’ file…
常用参数:
-n:静默模式,不显示未操作行,默认会将未操作的行显示。
-i:直接修改源文件,默认情况下,sed的操作不会对源文件有任何影响,只会将结果显示到显示器。
-e script:script为sed相关操作,同时执行多个操作,每个-e后,跟一个操作
-f FILE:FIEL指的是某一文件的路径(绝对,相对均可),将操作保存至文件中,一行一个操作,此方法可以同时执行多个操作。
-r:使用扩展的正则表达式。
Address:
1. startline , endline:需要操作的文件内容范围,以行来界定,用$来表示最后一行
2. /RegExp/:正则表达式
3. /Pattern1/ , /Pattern2/:第一次被Pattern1匹配到的行开始至第一次被Pattern2匹配到的行之间的行
4. LineNumber:精确指定某一行
5. Startline,+#:#指的是某一非负整数,从指定行开始至其后的#行
Command:
1. d:删除匹配到的行
2. p:打印显示符合条件的行
3. a \string:在指定行后添加string行,如果需要加多行,可使用\n来换行
4. i \string:在指定行前添加string行,用法同3
5. r FILE:FIEL指的是某一文件的路径(绝对,相对均可),将指定的文件内容添加至符合条件的行后
6. W FILE:FIEL指的是某一文件的路径(绝对,相对均可),将指定范围的内容保存至文件FILE中
7. s/Pattern/string/:查找匹配的子串,并替换string,默认只替换每行中第一次被匹配到的串
s/Pattern/string/g:全局替换,只要匹配到,就替换
s/Pattern/string/i:忽略大小写
注:这里的“/”分割线并非固定,也可使用#,@等,但须保证三分割符相同
例子:
1. 使用sed显示/etc/passwd中的第一行,最后一行,五至十行
命令:
显示第一行: [root@localhost~]# sed -n '1p' /etc/passwd
显示最后一行: [root@localhost~]# sed -n '$p' /etc/passwd
显示五至十行: [root@localhost~]# sed -n '5,10p' /etc/passwd或
[root@localhost ~]# sed -n '5,+5p'/etc/passwd
结果如图:
2. 删除/boot/grub2/grub.cfg文件中的行首的空白
命令:
[root@localhost ~]# sed 's/^[[:space:]]*//' /boot/grub2/grub.cfg
结果:
3. 删除/boot/grub2/grub.cfg文件中的行首的空白行
命令:
[root@localhost ~]# sed '/^$/d' /boot/grub2/grub.cfg
结果:
4. 删除/etc/inittab行首的#号
命令:
[root@localhost ~]# sed 's/^#//g' /etc/inittab
结果:
5. 删除/etc/inittab行首的#号,但要求其后必须包含空格
命令:
[root@localhost ~]# sed -r 's@^#[[:space:]]+@@g' /etc/inittab
结果:
6. 取出路径/etc/ssh/中的etc子串
命令:
[root@localhost ~]# echo /etc/ssh/ | sed -r 's@/(.*)/[^/]+/@\1@g'
结果: