1. 文本处理

  sed编辑器根据sed命令处理数据流中的数据;在流编辑器将所有命令与一行数据匹配完后,它会读取下一行数据并重复以下过程:

    (1) 一次从输入中读取一行数据

    (2) 根据所提供的编辑器命令匹配数据

    (3) 按照命令修改流中的数据

    (4) 将新的数据输出到STDOUT

  格式:

    sed options script-command input-file

  选项:

-e script

在script中指定命令

-f file

从file文件中读取命令

-n

不产生命令输出,使用print命令完成输出

-i

将修改应用到文件

=

打印行号,行号由换行符决定

l

打印数据流中的文本和不可打印的ASCII字符

 命令:

s

替换行

sed '[address]/s/pattern/replacement/flags'

d

删除行

sed '[address]command'

i/a

插入/追加行

sed '[address]command\new line'

c

修改行

sed '[address]command\new line'

y

转换单字符

sed '[address]y/inchars/outchars/'

w

写入行

sed '[address]w test.file' date.txt

r

读取行

sed '[address]r test.file' date.txt

  定义编辑器命令:

    # echo "this is a test" | sed 's/test/big test/'

    this is a big test

  使用多个编辑器命令:

    # echo "this is a test" | sed 's/test/big test/;s/this/here/'

    here is a big test

  从文件中读取编辑器命令:

    #sed -f script1.sed data1.txt

  Tips:sed编辑器不会修改文本文件的数据,只会将修改后的数据发送到STDOUT;若想修改,可使用-i选项

2. sed编辑器基础 

【行寻址】

  将命令作用于特定行和某些行

  格式1:

    [address] command

  格式2:

    address {

      command1

      command2

      command3

    }

  数字方式的行寻址:

    最后一行的行号可使用$代替

    # sed '2s/dog/cat/' data.txt

    # sed '2,3s/dog/cat/' data.txt

    # sed '2,$s/dog/cat/' data.txt

  文本模式过滤器:

  /pattern/command

    # sed -n '/kim/s/bash/cash/p' /etc/passwd

    kim:x:1001:1001::/home/kim:/bin/cash

    Tips:使用正则表达式,可创建高级文本模式匹配表达式来匹配各种数据

  命令组合:

    可用花括号{}将多条命令组合在一起,行寻址方式如格式2

    # sed '/two/{s/quick/slow/;s/dog/cat/}' data.txt

【替换】

  格式:

    sed '[address]/s/pattern/replacement/flags'

  替换选项:

    s命令(substitude)可在行中替换文本,默认仅替换第一处

  替换标记:

  s/pattern/replacement/flags

    (1) 数字,表明替换第几处

    (2) g,替换所有

    (3) p,原先行的内容要打印出来(先打印修改的行,结合-n选项可实现只输出修改的行)

    (4) w file,替换结果写入文件

      # cat data.txt

      This is a test line.

      This is a different line.

      # sed 's/test/trail/w file.txt' data.txt

      This is a trail line.

      This is a different line.

      # cat file.txt

      This is a trail line.

  替换字符:

    sed允许选择其它字符来作为替换命令中的字符串分隔符

      # sed -n 's!/bin/bash!/bin/csh!p' /etc/passwd

      root:x:0:0:root:/root:/bin/csh

      fonsview:x:1000:1000::/home/fonsview:/bin/csh

    Tips:  替换命令结合正则表达式中的回溯引用,可实现删除一行中的特定部分

      # echo "math: a+b=c" | sed -e '/math/s/\(.*=\).*/\1ab/'

      math: a+b=ab

【删除行】

  格式:

    sed '[address]command'

  删除文本流中的特定行,可以用删除命令d

    # sed '/two/,/three/d' data.txt

    The quick brown fox jumps over the lazy dog one     

    The quick brown fox jumps over the lazy dog four

【插入和追加行】

  格式:

    sed '[address]command\new line'

    (1) 插入insert会在指定行前增加新行,命令i

    (2) 追加append会在指定行后增加新行,命令a

      # sed '1i\hello,\world!' data.txt

      # sed '/two/i\hello,world!' data.txt  

【修改行】

  修改(change)命令允许修改数据流中整行文本的内容

  格式:

    sed '[address]command\new line'

    # sed '1c\dog' data.txt

    # sed '/two/c\dog\cat' data.txt

【转换】

  格式:

    sed '[address]y/inchars/outchars/'

  转换(transform)命令(y)是唯一可以处理单个字符的sed命令,对inchars和outchars进行一对一映射

    # sed 'y/1234/abcd/' data.txt    

    The quick brown fox jumps over the lazy dog a one     

    The quick brown fox jumps over the lazy dog b two

    The quick brown fox jumps over the lazy dog c three

    The quick brown fox jumps over the lazy dog d four

【写入文本】

  格式:

    sed '[address]w test.file' date.txt

    # sed -n '/one/,/three/w text.txt' data.txt

    # cat text.txt

    The quick brown fox jumps over the lazy dog 1 one     

    The quick brown fox jumps over the lazy dog 2 two

    The quick brown fox jumps over the lazy dog 3 three

【读取数据】

  读取(read)命令允许你将一个独立文件中的数据插入到数据流中,指定的地址行之后

  格式:

    sed '[address]r test.file' date.txt

    # sed '2r text.txt' data.txt

    The quick brown fox jumps over the lazy dog 1 one     

    The quick brown fox jumps over the lazy dog 2 two

    hello,world!

    The quick brown fox jumps over the lazy dog 3 three

    The quick brown fox jumps over the lazy dog 4 four

【sed】基本用法的更多相关文章

  1. linux中sed的用法【转】

    sed命令行格式为:         sed [-nefri]  ‘command’  输入文本/文件 常用选项:        -n∶取消默认的输出,使用安静(silent)模式.在一般 sed 的 ...

  2. sed命令用法详解

    sed命令用法 sed是一种流编辑器,它是文本处理中非常有用的工具,能够完美的配合正则表达式使用,功能不同凡响.处理时,把当前处理的行存储在临时缓冲区中,称为『模式空间』(pattern space) ...

  3. Linux中sed的用法实践

    Linux中sed的用法实践 参考资料:https://www.cnblogs.com/emanlee/archive/2013/09/07/3307642.html http://www.fn139 ...

  4. SED命令用法整理

    sed '/Started/'q  匹配到Started字符串则退出sed命令 sed '/Started/{/in/q}'  同时匹配到Started和in两个字符时则退出sed命令 ------- ...

  5. [转载]linux中sed的用法

    转自:http://www.cnblogs.com/emanlee/archive/2013/09/07/3307642.html sed命令行格式为:         sed [-nefri]  ‘ ...

  6. Linux中Sed的用法

    Linux中Sed的用法 sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换.删除.新增.选取等特定工作,下面先了解一下sed的用法sed命令行格式为: ...

  7. sed高级用法:模式空间(pattern space)和保持空间(hold space)

    摘自:https://blog.csdn.net/ITsenlin/article/details/21129405 sed高级用法:模式空间(pattern space)和保持空间(hold spa ...

  8. 正则表达式,sed简单用法

      一. 正则表达式 1. 常见的正则表达式字符 [] 匹配字符集 grep "bl[lo]g" oldboy.txt 表示字符‘l’或者‘o’都可匹配 * 重复前面字符任意次 g ...

  9. Linux sed命令用法

    概述 sed命令是一个面向字符流的非交互式编辑器,不允许用户与它进行交互操作.sed是以行为单位处理文本内容的.在shell中,可以批量修改文本内容. 用法 sed [选项] [动作] 选项与参数:- ...

  10. linux之sed的用法

    sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换.删除.新增.选取等特定工作,下面先了解一下sed的用法sed命令行格式为:         sed ...

随机推荐

  1. arcgis 服务网页打开需要输入用户名和密码问题解决

    解决方法: 在站点manager中,检查服务的安全性,确认是否是公共.如果不是,设置为公共,面向任何人:如果服务已经被设置为面向公共,那么先设置为私有,面向所选用户,然后再设置为公共,面向任何人 如果 ...

  2. SAP CRM和C4C的内容管理(Content Management)

    SAP CRM内容管理 SAP CRM使用Attachments这个UI给用户提供内容管理的功能.通过新建按钮可以上传本地文档到CRM系统: 该内容管理支持简单的版本管理功能,用户可点击Check O ...

  3. shiro系列三、ssm框架整合shiro实现权限控制

    shiro权限框架是一个非常优秀的框架,前面的几篇文章对shiro进行了非常详细的介绍和原理分析,那么接下来让我们开始在web项目中使用它(javase也能用shiro): 一.数据库表结构设计 二. ...

  4. host文件简介及修改后不能保存解决方法

    一.文件概述 Hosts是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”,当用户在浏览器中输入一个需要登录的网址时,系统会首先 ...

  5. 4.安装配置bacula-gui(管理页面)

    1.   安装配置bacula-gui(管理页面) Bacula-gui分为两个部分: Baculum-api可通过OAuth2(开放认证模式)或HTTP认证(用户名和密码)认证提供统一接口服务: B ...

  6. python基础:数据类型阶段总结

    name =“   alex”1.移除name变量对应的值两边的空格,并输出处理结果      res=name.strip(’  ‘)      print(res) 2.判断neme变量对应的值是 ...

  7. 【完美解决】vue,页面跳转样式错位但是刷新又好了的情况

    在vue文件中,做样式分离: 将覆盖样式单独写在一个style标签内,原页面写在 scoped样式作用域下.

  8. 作业八——非确定的自动机NFA确定化为DFA

    NFA 确定化为 DFA 子集法: f(q,a)={q1,q2,…,qn},状态集的子集 将{q1,q2,…,qn}看做一个状态A,去记录NFA读入输入符号之后可能达到的所有状态的集合. 步骤: 1. ...

  9. git log master..origin/master --oneline | wc -l 怎么知道本地仓库是不是最新的

    git log master..origin/master --oneline | wc -l 怎么知道本地仓库是不是最新的 git fetch   # 一定要先 fetch git log mast ...

  10. iframe通信相关:父操作子,子操作父,兄弟通信

    这里写window和document是认为代表了BOM和DOM(个人理解不一定对) 拿到了window就能操作全局变量和函数 拿到了document就能获取dom,操作节点 父操作子 window:选 ...