sed 命令学习笔记

本文是一篇关于sed命令的学习笔记,详细讲解了sed的执行过程、-i和--in-place选项、正则表达式以及常用命令。通过实例展示了如何选择处理特定文本行、如何进行替换操作,并探讨了与其他文本处理命令的区别和使用场景。
摘要由CSDN通过智能技术生成

跳过目录

简介

返回目录
本文介绍了sed命令的基本规则和基础用法。如果希望了解sed命令的高级用法,请搜索其它教程。据说完整地介绍sed需要一本书。

sed是 Stream EDitor 的缩写。sed的好处是,不需要像vim那样打开文件后才能编辑,在shell脚本中,如果要对文本做一些简单的处理(比如插入、删除文本行、替换),可以用sed命令实现。

sed 命令的执行过程

返回目录
执行 sed 命令需要告诉 sed 两样东西:sed script和待处理的文本。sed script包含一条或多条sed commandsed 命令)。开始执行后,sed命令一行一行地处理给定的文本,对每一行,依次应用给定的sed命令。

# 把单词 'hello' 替换成 'world'
$ echo 'hello' | sed 's/hello/world/'
world

这个示例中,sed命令只有一条:s/hello/word/,待处理的文本也只有一行:word。命令的作用:用word替换hello

sed确定sed script和待处理文本的逻辑是:

  1. -e指定sed命令,或者用-f指定`sed 脚本的文件命名
  2. 如果这两个选项都没有,那第一个非sed选项参数被解析为sed 命令
  3. 其余非选项参数被人为是待处理的文本文件的名字。
  4. 如果没有给定待处理的文件名,或这文件名为-,则从标准输入 stdin读取待处理文本。非sed选项参数是指第一个不以-开头的参数。

可以同时使用-e-f,可以多次使用-e-f

下面是相应的示例代码。

# 用含有三行带编号的 hello 的文件做测试
$ cat tri-hello.txt
1 hello
2 hello
3 hello
# 把每一行的 hello 替换为 "world" 
$ sed -e 's/hello/world/' tri-hello.txt
1 world
2 world
3 world
# 如果不用 -e 和 -f 选项,第一个非选项参数就是要执行的 sed 命令
$ sed 's/hello/world/' tri-hello.txt
1 world
2 world
3 world
# 用 -e 选项,可以把要执行的 sed (子)命令放在后面,例如:
$ sed  tri-hello.txt  -e 's/hello/world/'
1 world
2 world
3 world
# 如果省略文件名,sed命令会从标准输入获取要处理的文本
$ echo 'word' | sed 's/hello/world/'
world
$ cat tri-hello.txt | sed 's/hello/world/'
1 world
2 world
3 world

sed命令开始执行后,其处理步骤简要概括如下:

  1. input stream中取出一行文本,放入一个叫pattern sapce的地方,
  2. 把 sed script 里的命令逐个应用到这一行文本上,
  3. 如果没有指定 -n选项,把pattern space里的内容(就是处理后的文本)输出到output stream中,否则转至步骤 4.
  4. 最后清空pattern space
  5. 取出下一行文本,继续下一个处理循环。

完整的处理循环参考 gnu 关于 sed 的在线文档中Execution-Cycle部分的内容。

-i --in-place选项

返回目录
,使用-i直接修改文件内容,不输出。

$ for i in {
   1
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值