sed 随笔

sed 概述

  • sed 是一款流编辑工具,用来对文本进行过滤与替换工作。
  • sed 通过输入读取文件内容,但一次仅读取一行内容进行某些指令处理后输出,所以 sed更适合于处理大数据文件
  • sed 是一个“非交互式的”面向字符流的编辑器。能同时处理多个文件多行的内容,可以不对原文件改动,把整个文件输入到屏幕,可以把只匹配到模式的内容输入到屏幕上。还可以对原文件改动,但是不会再屏幕上返回结果。

sed 执行流程

Sed 脚本执行遵从下面简单易记的顺序: Read,Execute,Print,Repeat(读取,执行,打印,重复),
简称 REPR

  • 通过文件或管道读取文件内容。
  • sed 并不直接修改源文件,而是将读入的内容复制到缓冲区中,我们称之为模式空间(pattern space)。
  • 根据 sed 的指令对模式空间中的内容进行处理并输出结果,默认输出至标准输出即屏幕上。

分析脚本执行顺序:

读取一行到模式空间(sed 内部的一个临时缓存,用于存放读取到的内容)
在模式空间中执行命令。如果使用了{ } 或 –e 指定了多个命令, sed 将依次执行每个命令
打印模式空间的内容,然后清空模式空间
重复上述过程,直到文件结束

如图:

  sed编辑器逐行处理文件(或输入),并将结果发送到屏幕。

  具体过程如下:首先sed把当前正在处理的行保存在一个临时缓存区中(也称为模式空间),然后处理临时缓冲区中的行,完成后把该行发送到屏幕上。sed每处理完一行就将其从临时缓冲区删除,然后将下一行读入,进行处理和显示。处理完输入文件的最后一行后,sed便结束运行。

  前面说到sed不会修改文件,那么现在我们可以知道是为什么了?是因为sed把每一行都存在临时缓冲区中,对这个副本进行编辑,所以不会修改原文件。

sed 使用方法

sed 使用方法

sed     全称    stream editor    基本功能    增删改查    过滤    取行

语法格式:

sed  [options]  [sed-commands]  [input-file]

sed   选项     sed命令       输入文件

input-file  可以是标准输入 也可以是 文件

# sed 常见的语法格式有两种,一种是命令行模式,一种是脚本模式
sed的命令格式:sed [option]
'sed command'filename
sed的脚本格式:sed [option]
-f 'sed script'filename

 

sed options(选项)

-n :只打印模式匹配的行
-e :直接在命令行模式上进行sed动作编辑,此为默认选项
-f :将sed的动作写在一个文件内,用–f filename 执行filename内的sed动作
-r :支持扩展表达式
-i :直接修改文件内容

 

sed 读取 file1 内容,追加到 file2 文件匹配行下边

options sed-commands

sed 命令

注释

-i

r sed -i '' '/test/r s3迁移shell-user.sh' a

将‘s3迁移shell-user.sh’文件内容追加到 a 文件 ‘test’ 行下

备注:在linux下不需要 -i 后的 '' ,在mac中需要这样写。

原因是Mac中用i命令进行替换时,强制要求备份 sed -i '一个路径' 's/aaa/bbb/' test.txt

如果不想备份,可以直接使用 sed -i '' 's/aaa/bbb/' test.txt,路径使用''单引号代替

 

 

 
 
posted @ 2017-08-31 08:58  Star-Hitian  阅读(129)  评论(0编辑  收藏  举报