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

shell笔记之sed编辑器的基础用法(上)

[复制链接]

尚未签到

发表于 2018-8-17 08:21:10 | 显示全部楼层 |阅读模式
  在开始写之前,先申明,本文是自己看书后,用自己的语言总结下来的笔记,如有不对之处,还请各位博友予以指正。
  shell脚本最常用的功能之一就是处理文本文件,我们利用编写的shell脚本可以简化重启服务器的操作步骤,重启各种服务,进行各种应用服务的自动化部署,简化了不少操作时间。然而shell脚本也有不足之处,就是在处理文本内容上不是那么灵活了。
  假如有多个文件,内容大体类似,但是需要将里面的个别字符替换为我们需要的字符,在这个时候,shell脚本就显得力不从心了。不过sed编辑器的出现,弥补了shell脚本的不足。sed命令行编辑器能够很方便的格式化、插入、修改、替换文本内容。linux下最常用的两个文本命令行编辑器就是sed和gawk,本文记录的是sed命令行编辑器的使用。
  使用sed命令格式为 sed options script file   options参数允许自定义sed运行行为
  参数如下:
-e script  将脚本中指定的命令添加到处理输入时执行的命令中   -f file  将文件中指定的命令添加到处理输入时执行的命令中   -n  不需要为每个命令产生输出,但要等待打印命令  下面用个简单的例子做一下文本字符替换练习:
  $ echo "this is study script" | sed 's/script/bashshell/'
  this is study bashshell
  利用管道,将数据流传送给sed进行替换,本例中sed使用了s命令,用第二个字符串bashshell替换了script。当然,这个例子只是编辑了一行数据,如果多行数据,处理的速度是否能够使用相同时间呢?接着看下面这个例子
  $ cat test.txt
  this is test script
  this is test script
  this is test script
  this is test script
  this is test script
  $ sed 's/script/shell/' test.txt
  this is test shell
  this is test shell
  this is test shell
  this is test shell
  this is test shell
  sed命令执行与返回数据几乎同时进行,它在处理每一行数据的同时,会显示执行后的结果,在sed编辑器结束处理整个文件之前,就能看到结果。
  注意,sed编辑器并不修改文件中的内容,利用cat test.txt查看文件,结果文件中的内容还是原来的。我们再加上- i参数执行后试试看。
  $ sed -i 's/script/shell/' test.txt
  执行完毕后,并不显示执行后的结果,但是文件中的script却已经被替换成shell字符了。这就是- i选项的用意。
  如果一次性要处理多个命令,sed支持在命令行中使用多个编辑器命令,但是要加上-e参数,使用;将多个命令隔开。
  $ sed -e 's/test/dog/;s/script/shell/' test.txt
  两个命令之间,必须要用分号隔开,且在命令结尾和分号之间,不能有任何空格。
  除了分号分隔命令外,在bash shell当中,我们还可以使用次提示符 ,只需要输入前单引号打开脚本,bash会提示你继续输入,直到你键入后单引号结束。
  我们再建立一个新的内容较多的文本。
  $ cat test2.txt
  this is script test, we are study bash shell
  this is script test, we are study bash shell
  this is script test, we are study bash shell
  this is script test, we are study bash shell
  this is script test, we are study bash shell
  $ sed -e'
  > s/script/shell/
  > s/study/learning/
  > s/bash/c/' test2.txt
  this is shell test, we are learning c shell
  this is shell test, we are learning c shell
  this is shell test, we are learning c shell
  this is shell test, we are learning c shell
  this is shell test, we are learning c shell
  小提示: 一定要在后单引号出现的同一行上完成该命令,因为bash检测到后单引号就处理命令。
  如果有多个sed命令要处理,那么我们可以把这些命令单独保存在一个文件当中,然后加上-f选项指定文件进行处理,会更加方便。我们将上述例子中执行的多个命令写入script1文件当中,然后加上-f选项进行处理。
  $ cat script1
  s/script/shell/
  s/study/learning/
  s/bash/c/
  $ sed -f script1 test2.txt
  this is shell test, we are learning c shell
  this is shell test, we are learning c shell
  this is shell test, we are learning c shell
  this is shell test, we are learning c shell
  this is shell test, we are learning c shell
  大家已看到上述例子当中,使用s命令将新文本替换某一行的文本,不过,还有其他几个选项可用于文本替换。
  对于替换命令替换文本字符串匹配模式的方法,有一个值得注意的地方,下面就先看看这个例子:
  $ cat test2.txt
  this is script test, we are test bash shell
  this is script test, we are test bash shell
  this is script test, we are test bash shell
  this is script test, we are test bash shell
  this is script test, we are test bash shell
  $ sed 's/test/study/' test2.txt
  this is script study, we are test bash shell
  this is script study, we are test bash shell
  this is script study, we are test bash shell
  this is script study, we are test bash shell
  this is script study, we are test bash shell
  看到了吗?用s命令将test替换为study的时候,只是替换了文本内每行的第一个匹配字符,第二个匹配字符并没有被替换掉。
  要使替换命令继续替换接下来匹配的字符,则必须使用替换标记,替换标记要放在替换命令字符串之后,格式如下:
  s/pattern/replacement/flags
  就先记录到这里吧,下一篇再接着讲替换标记。


运维网声明 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.iyunv.com/thread-552837-1-1.html 上篇帖子: shell学习之shell执行方式及排错 下篇帖子: 一起学Shell之(六)输入、输出、文件与命令执行
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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