sed命令详解
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sed命令详解相关的知识,希望对你有一定的参考价值。
Sed命令详解1. 简介
sed是一种在线编辑器、行编辑器,一次处理一行内容,在处理时,把当前的行存储到临时缓冲区中,该缓冲区称为"模式空间"(pattern space),接着用sed命令处理缓冲区中的内容,处理完毕后,把缓冲区的内容送到标准输出;然后紧接着去处理下一行,重复完成相同的操作,直至文件末尾;sed处理的整个过程中,对象文件中的内容并没有改变,除非使用重定向来存储处理后的结果。sed主要用来自动编辑一个或多个文件,简化文件的反复操作过程。
流程如下图:
2. sed命令功能sed [OPTION]... script-only-if-no-other-script [input-file]...
- 常用选项:
-n:表示不输出模式空间中内容至屏幕 -e script1 -e script2 -e script3:多点编辑 -f /path/to/script_file:从指定的文件中读取脚本并运行 -i:直接修改源文件 -r:支持扩展正则表达式
- script:地址定界 编辑命令
1.地址定界
(1)空地址:对全文进行处理
(2)单地址:
#:指定行
/pattern/:指此模式所匹配到每一行
(3)地址范围:
#,#:表示数字,指定行
$:最后一行
#,/regexp/:从#开始,到第一次被/regrexp/所匹配到的行结束,中间的所有行
/regexp1/,/regexp2/:从第一次被/regexp1/所匹配到的行开始,到第一次被/regexp2/匹配到的行结束,中间所有的行
(4)步进:
1~2:所有奇数行
2~2:所有偶数行
2.编辑命令:
d:删除模式空间的行
p:显示模式空间的内容
a\text:在行后面追加文本,支持使用\n实现多行追加
i \text:在行前面插入文本,支持使用\n实现多行插入
c\text:用text替换匹配到的行
w /path/to/somefile:把指定内容另存至/path/to/somefile路径所指定的文件中
r /path/tp/somefile:在文件的指定位置插入另一个文件的所有内容,完成文件合并br/>=:为模式空间中的行打印行号
s/regexp/replacement/:替换由regexp所匹配到内容为replacement
(支持使用其他分隔符如s@@@,s###;条件是该分隔符在后面的模式中
没有出现过),对于替换还有2个后选项g和i,分别表示如下:
g:全局替换
i:不区分大小写
3.常用命令功能演示:
(1)显示/etc/fstab第3行内容:sed -n ‘3p‘ /etc/fstab
(2)显示/etc/fstab第3至6行内容:sed -n ‘3,6p‘ /etc/fstab
(3)显示/etc/fstab奇数行内容:sed -n ‘1~2p‘ /etc/fstab
(4)显示/etc/fstab的最后一行sed -n ‘$p‘ /etc/fstab
(5)删除/boot/grub2/grub.cfg文件中所有行的行首的空白字符sed ‘s/^[[:space:]]\+//g‘ /boot/grub2/grub.cfg
(6)删除/boot/grub2/grub.cfg文件中所有以#开头,后跟至少一个空白字符的行的行首的#和空白字符:sed ‘s/^#[[:space:]]\+//g‘ /boot/grub2/grub.cfg
(7)把/tmp/grub.cfg的文件的奇数行另存为/tmp/grub.cfg3sed ‘1~2w /tmp/grub.cfg3‘ /tmp/grub.cfg
(8)echo一个文件路径取出其基名,进一步取出其路径名
如:取出路径名:echo "/etc/sysconfig/network-scripts/" | sed -r ‘s@[^/]+/?$@@‘
取出基名:echo "/etc/sysconfig/network-scripts/" | sed ‘s@^.*/\([^/]\+\)/\?$@\1@‘
4.sed的高级用法
sed除了模式空间(pattern space)还有一个"hold space"的内存空间,称之为保持空间
高级编辑命令:
h:用模式空间中的覆盖保持空间的内容
H:把模式空间中的内容追加至保持空间中的内容的后面
g:从保持空间的取到的内容,并将其覆盖模式空间中的内容
G:从保持空间中取到的内容,并将其追加在模式空间中的内容的后面
x:把保持空间和模式的内容进行互换
n:读取匹配到的行的下一行至模式空间,(会覆盖模式空间中的原有内容)
N:读取匹配到的下一行至模式空间,追加在模式空间中原有内容的后面
d:删除模式空间的内容
D:删除多行模式空间中的首行
注意:命令功能可使用!取反,分号可用于分隔脚本
示例:
sed -n ‘n;p‘ FILE:显示偶数行
sed ‘1!G;h;$!d‘ FILE:逆序显示文件
sed ‘$!d‘ FILE:取出最后一行
sed ‘$!N,$!D‘ FILE:显示最后两行
sed ‘/^$/d;G‘ FILE:保证指定的文件每一行后有且仅有一个空白行
sed ‘n;d‘ FILE:显示奇数行
sed ‘G‘:在文件中的每行都加空白行
以上是关于sed命令详解的主要内容,如果未能解决你的问题,请参考以下文章