RELATEED CONSULTING
相关咨询
选择下列产品马上在线沟通
服务时间:8:30-17:00
你可能遇到了下面的问题
关闭右侧工具栏

新闻中心

这里有您想知道的互联网营销解决方案
sed命令的介绍和用法-创新互联

sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。然后读入下行,执行下一个循环。如果没有使诸如‘D’的特殊命令,那会在两个循环之间清空模式空间,但不会清空保留空间。这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。

创新互联是一家从事企业网站建设、成都做网站、成都网站建设、行业门户网站建设、网页设计制作的专业网站建设公司,拥有经验丰富的网站建设工程师和网页设计人员,具备各种规模与类型网站建设的实力,在网站建设领域树立了自己独特的设计风格。自公司成立以来曾独立设计制作的站点1000多家。

sed的功能:主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等

sed基本用法

sed [option]... 'script' inputfile...

sed [选项].. '脚本这个脚本是sed自身的脚本' 处理的文件...

常用选项:

-n 不输出模式空间内容到屏幕,即不自动打印

-e 多点编辑

-f /PATH/SCRIPT_FILE 从指定文件中读取编辑脚本

-r 支持使用扩展正则表达式

-i.bak 备份文件并原处编辑:直接修改

sed -i.bak(自己定义) '/^root/aadmin';真的修改文件并备份原文件

script:

'地址命令':地址是对文本中的那个部分进行处理,对那些行进行处理如何进行处理就是根据命令来进行处理的

地址定界:

(1) 不给地址:对全文进行处理

(2) 单地址:

#: 指定的行,$:最后一行

/pattern/:被此处模式所能够匹配到的每一行

(3) 地址范围:

#,#

#,+#

/pat1/,/pat2/:只显示中间的部分内容

例如:sed -n '/^ftp/,/^sa/p' /etc/passwd

#,/pat1/

(4) ~:步进

1~2 奇数行

seq 10 | sed -n '1~2p'

2~2 偶数行

seq 10 | sed -n '2~2p'

sed -n '2p' /etc/passwd :只打印第2行

sed命令不仅是对文本,还可以把一些命令的标准输出作为输入进行处理

比如:ifconfig eth0 | sed -n '2p'

编辑命令:

d 删除模式空间匹配的行,并立即启用下一轮循环(sed '2d' /etc/passwd 第二行不显示)

p 打印当前模式空间内容,追加到默认输出之后(本身就会打印加上p之后会在打印一次)

a []text 在指定行后面追加文本,支持使用\n实现多行追加

seq 10 | sed 'axxx':每一行追加xxx

还可以添加换行符:seq 10 | sed 'axxx\nttt\nzzz'

还可以添加换行符:seq 10 | sed '2axxx\nttt\nzzz'

第二行进行追加

i []text 在行前面插入文本:添加斜线表示之后的内容为添加的内容

c []text 替换行为单行或多行文本

w /path/file 保存模式匹配的行至指定文件

r /path/file 读取指定文件的文本至模式空间中匹配到的行后

sed -n '/^UUID/r /etc/issue' /etc/fstab:读取文件内容

= 为模式空间中的行打印行号

! 模式空间中匹配行取反处理

sed '' /etc/passwd :什么都不跟相当与显示一下文件

修改selinux中配置文件

sed -i '/^SELINUX=enforcing/cSELINUX=disabled' /etc/selinux/config

禁用SElinux

sed -i ^C/^SELINUX=/cSELINUX=disabled' /etc/selinux/config

s///g:查找替换,分隔符自己指定,可为s@@@,s###

替换标记:g,全局替换;i,忽略大小写

高级编辑命令

h:把模式空间中的内容覆盖至保持空间

H:把模式空间中的内容追加至保持空间

g:把保持空间中的内容覆盖至模式空间

G:把保持空间中的内容追加至模式空间

x:把模式空间和保持空间中的内容互换

n:覆盖读取匹配到的行的下一行至模式空间

N:追加读取匹配到的行的下一行至模式空间

d:删除模式空间中的行

D:删除多行模式空间中的行

在sed语句中强行引用变量

'''var_name''':使用三个’引号在sed语句中可强行引用变量值

例:IP=IP

[root@centos7 test]#ifconfig ens33 | sed -nr 's#.inet (.) net.*#'''$IP''' \1#p'

IP 192.168.0.100

示例:

seq 1 10 | sed -n 'n;p' :取偶数行

seq 1 10 | sed 'n;d' :取奇数行

seq 1 10 | sed '1!G;h;$!d' :逆序显示

seq 1 10 | sed '$!d' :取出最后一行

seq 1 10 | sed '/^$/d;G' :删除文件中的空白行,而後为所有非空白行添加一个空白行

seq 1 10 | sed '$!N;$!D' :显示最后两行

seq 1 10 | sed 'G' :在原有文件的每行后添加一个空白行

sed练习:

练习:统计/etc/init.d/functions文件中每个单词出现的次数,并排序(使用grep和sed两个命令进行实现)

sed -nr 's#[^[:alpha:]]+#\n#gp' /etc/rc.d/init.d/functions | sort |uniq -c |sort -nr

grep -Eo "[[:alpha:]]+" /etc/rc.d/init.d/functions | sort |uniq -c | sort -nr

练习:取出指定网卡的IP地址

ifconfig eth0 |sed -rn '2s/(^.inet )(.)( netmask.*$)/\2/p'

ifconfig eth0|sed -nr '2s/.t (.) net.*/\1/p'

练习:echo /etc/sysconfig/network/ 取出目录名和基名

目录名:echo /etc/sysconfig/network/ | sed -nr 's#(./)([^/].)/?$#\1#p'

基名: echo /etc/sysconfig/network/ | sed -nr 's#(./)([^/].)/?$#\2#p'

练习:将文本文件的n和n+1行合并为一行

n为奇数行:seq 1 10 | sed -n 'N;s#\n##p'

n为偶数行:seq 1 10 | sed -n '1d;N;s#\n##p'

另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


本文名称:sed命令的介绍和用法-创新互联
网页地址:http://lswzjz.com/article/djeohs.html