设为首页 收藏本站
查看: 669|回复: 0

[经验分享] sed命令详解

[复制链接]
累计签到:2 天
连续签到:1 天
发表于 2016-8-10 08:59:36 | 显示全部楼层 |阅读模式
sed命令:
Stream EDitor, 行编辑器
sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。
wKioL1ep46nzQ9qsAAB2Wf-5zkg405.jpg
语法:sed [options] ..... ‘script’ [input-file]
    script:地址定界编辑命令
常用选项:
-n:不输出模式空间中的内容的制动打印
-e: 多点编辑
-f /PATH/TO/SED_SCRIPT_FILE: 从指定文件中读取编辑脚本,每行一个编辑命令;
-r :支持使用扩张正则表达式
-i :直接编辑原文件   
地址界定:
1、不给地址:对全文进行处理;
2、单地址:
    #:指定的第#行
    /pattern/:被此模式所匹配到的行;
3、地址范围:
    #,#:   从第#行到第#行
    #,+# :  从第#行到第#+#
    #,/pat1/: 从第#行道匹配到第一次匹配到pat1,之间的行
    $:最后一行
4、步进:~
    1~2:所有奇数行
    2~2:所有偶数行
编辑命令:
-d: 删除
-p:显示模式空间内容
a \text: 在行的后面追加文本,支持使用\n实现多行追加
i \text :在行的后面追加文本,支持使用\n实现多行追加
c \text : 把匹配到的行替换为此处指定的文本
w /PATH/TO/SOMEFILE :保存模式空间匹配到的行至指定的文件中
r /PATH/TO/SOMEFILE : 读取指定文件中的内容至当前文件被模式匹配到的行后面,文件合并。
= :为模式匹配到到的行打印行号
!:条件取反
s///:查找替换,其分割符可自行指定。如:@@@,###
        替换标记:
g:全局替换
w /PATH/TO/SOMEFILE  : 将替换成功的结果保存至指定文件中;
p:显示替换成功的行



sed元字符:
^ 匹配行开始,如:/^sed/匹配所有以sed开头的行。
$ 匹配行结束,如:/sed$/匹配所有以sed结尾的行。
. 匹配一个非换行符的任意字符,如:/s.d/匹配s后接一个任意字符,最后是d。
* 匹配0个或多个字符,如:/*sed/匹配所有模板是一个或多个字符后紧跟sed的行。
[] 匹配一个指定范围内的字符,如/[ss]ed/匹配sed和Sed。
[^]
匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行
\(..\)匹配子串,保存匹配的字符,如s/\(love\)able/\1rs,loveable被替换成lovers。
& 保存搜索字符用来替换其他字符,如s/love/**&**/,love这成**love**。
\< 匹配单词的开始,如:/\<love/匹配包含以love开头的行
\>匹配单词的结束,如/love\>/匹配包含以love结尾的单词的行。
x\{m\}重复字符x,m次,如:/0\{5\}/匹配包含5个0的行。
x\{m,\}重复字符x,至少m次,如:/0\{5,\}/匹配至少有5个0的行。
x\{m,n\} 重复字符x,至少m次,不多于n次,如:/0\{5,10\}/匹配5~10个0的行。

示例:
1、删除/etc/grub2.conf文件中所 有以空白开头的行行首的空白字符
[iyunv@centos7 ~]# sed   's/^[[:space:]]\+//g'  /etc/grub2.cfg
wKiom1ep2VSSeIDFAAAhPqLm-jA614.jpg
2、删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的#和空白字符
[iyunv@centos7 ~]# sed 's/^#[[:space:]]\+//g' /etc/fstab
wKioL1ep2j2xhacKAAAcT-uyPv0800.jpg
3、在/root/install.log每一行行首增加#号
[iyunv@localhost ~]# sed 's/^/#/g' install.log
wKioL1ep2qDSFWCgAAA34LK8UHo681.jpg
4、在/etc/fstab文件中不以#开头的行的行首增加#号
[iyunv@centos7 ~]# sed -e 's/^[^#]/#&/g' -e 's/^$/#/' /etc/fstab
wKiom1ep2snRtfaNAAAkySh5d8A515.jpg

    sed命令中有两个空间,前面已经提到模式空间(pattern word),还有一个叫做保持空间(hold space)。在模式空间编辑后的文本都可以放置在保持空间中。保持空间与模式空间的内容可以互相交换,极大的提高使用灵活度。使用保持空间就需要用到高级的编辑命令了:

高级编辑命令:
h:把模式空间中的内容覆盖至保持空间中;
H:把模式空间中的内容追加至保持空间中;
g:把保持空间中的内容覆盖至模式空间中;
G:把保持空间中的内容追加至模式空间中;
x:把模式空间中的内容与保持 空间中的内容互换
n:覆盖读取匹配到的行的下一行至模式空间中;
N:追加读取匹配到的行的下一行至模式空间中
d: 删除模式空间中的行;
D :删除多行模式空间中的所有行;

示例:
1、sed -n 'n;p' FILE
解析:编辑命令分为两个部分:
①-n:不输出模式空间中的自动打印内容
②编辑命令中:n: 将读取到的行的下一行覆盖至模式空间,
    即:开始读取第一行时将第二行一并读取,在模式空间中第二行将第一行覆盖,即模式空间中现在只有第二行文件。然后p打印模式空间中的行。然后再读取文件中的第三,四行文件。模式空间中第四行将第三行覆盖,随后p打印出第四行,一次类推直至最后一行。所输出的结果即为第二、四、六……等偶数行。
结果:显示偶数行
wKiom1ep2xGh-oKqAAARqwAaQ1Y530.jpg
2、sed '1!G;h;$!d' FILE
解析:编辑命令分为三个部分:
①:1!G :不是第一行就执行G选项,及将保持空间内的内容追加至模式空间中。
②:h:将模式空间内的内容覆盖至保持空间
③:$!d:不是最后一行就删除
  首先命令读取文件中第一行内容,①不执行,②执行将模式空间内的内容覆盖至保持空间,即模式空间现为第一行内容,保持空间为第一行内容。③执行,模式空间为空,保持空间为第一行。
  然后读取第二行内容,①执行,模式空间为第二行,第一行。保持空间不变。② 执行,保持空间改变为第二行,第一行。③执行,模式空间变为空。
  以此类推,命令读取至最后一行时,①模式空间为最后一行,倒数第二行,……②执行,保持空间同模式空间一样逆序排列。③不执行。
结果:逆序显示文件的内容
wKiom1ep2zChBzIPAAAMB9ZbF3Y837.jpg
3、sed '$!N;$!D' file
解析:编辑命令分为两个部分:
①$!N:不是最后一行就将追加读取匹配到的行的下一行至模式空间中。
②$!D : 不是最后一行就删除多行模式空间中的所有行。
  首先读取文件第一行,①执行,模式空间为第一行,第二行。②执行,模式空间为空。
以此类推,读取至文件倒数第二行,①执行,模式空间为倒数第二行,倒数第一行。②不执行。
结果:取出文件最后两行。
wKiom1ep20rDfPbYAAAGQ1AJ0LM191.jpg
4、sed '/^$/d;G' FILE:
解析:编辑命令分为两个部分:
①/^$/d:匹配到空白行就删除。
②G:将保持空间中的行追加至模式空间中。
①执行,命令匹配到文件中的空白行,然后删除。②执行,保持空间为空,将空白行追加至模式空间行后。
结果:把文件中原有的空白行删除,而后为所有的非空白行后台添加空白行
wKioL1ep22aAoreDAAAazXWtIK8248.jpg
5、sed 'n,d' FILE
解析:编辑命令分为两个部分;
①:n: 覆盖读取匹配到的行的下一行至模式空间中
②:d:删除
首先,命令读取文件第一行,①执行,模式空间中为第二行,②执行,模式空间为空。命令未加-n选项,输出模式空间自动打印,即输出第一行,
以此类推,输出模式空间内容的自动答应,即为第一、三、五……行
结果:显示奇数行
wKiom1ep24Cx5TxSAAAIgmCjL1U596.jpg


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-255755-1-1.html 上篇帖子: Linux 中安装python 下篇帖子: Linux 中安装python所遇到的问题
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表