sed 基础使用

sed是流编辑器(stream editor),可以对文本文件和标准输入进行编辑,标准输入可以来自键盘.文件重定向.字符串.变量,甚至来自管道的文本

sed工作流程:

读取标准输入或文本数据,-->>复制到缓冲区-->读取命令或脚本第一个命令-->在缓冲区中操作, 不断重复 ,可以看出,它只对缓冲区内的内容进行修改,不直接作用于文件

如果想保存需要重定向或者用-w选项

  sed命令格式

sed  选项  '命令' 需要处理的文件    注意:需要用单引号将sed命令引起来

sed脚本文件需要用#!/bin/sed -f (-f表示正在调用脚本文件)

 

sed常用选项:  -n 如果不加此选项,sed命令会先将整个文本打印一遍,然后如果有匹配行,还会将匹配行再打印一遍,加上后仅仅打印指定位置

                   -e 如果只有一个命令,那么可以忽略,如果有多条指令,-e 选项将下一个字符串解析为sed编辑命令

                   -f 表示正在调用sed脚本文件

 

sed命令通常由定位文本行 和 编辑命令 组成  

定位文本行:  1:行号 2:使用正则

                                               sed命令定位文本方法

选项   意义
x  x为指定行号
x,y指定从x到y
/pattern/查询包含模式的行
/pattern/pattern/查询包含两个模式的行
/pattern/,x从模式匹配到x之间的行
x,/pattern/从x到模式匹配之间的行
x,y!不包括x和y行号的行

                                                                                        sed编辑命令

选项意义
p打印匹配行
=打印文件行号
a\在定位行号的下一行追加文本信息(注意是对行操作)
i\在定位行号的前一行
d删除定位行(注意没有\)
c\用新文本替换定位文本行(针对行)
s替换文本(针对具体字符串) s/被替换的字符串/新字符串/[替换选项]
r从另一个文件中读文本
w将文本写入到一个文件
y变化字符(针对字符) sed 'y/1234/abcd/' input
q从头开始匹配并打印,如果匹配到就立即退出,不打印后续
l(字符)显示控制字符  sed -n '1,$l' input 显示从第一行到最后一行控制字符
{}在定位行执行命令组;sed -n '/hello/{p;=}' input,中间用;隔开
n读取下一个输入行,用下一个命令处理新的行
h将模式缓冲区复制到保持缓冲区(覆盖)
H将模式缓冲区追加到保持缓冲区(追加)
x(将保持缓冲区的内容和模式缓冲区的内容互换)
g将保持缓冲区的内容复制到模式缓冲区(覆盖)
G将保持缓冲区的内容追加到模式缓冲区(追加)
  
  

注意事项:

sed不支持同时带多个编辑命令的用法,比如:sed -n '/hello/p=' input  xx  应该使用 sed -n -e '/hello/=' -e '/hello/p' input

-f 选项只有调用sed脚本文件时才起作用,sed对脚本要求比较严格,不要有多余的空格什么的,如果依然报错加上\试试,换行也需要加入\

如果匹配字符中有元字符,需要用\转义

$在正则中表示行尾,在sed中表示最后一行  比如: sed '$p' input  #打印最后一行

注意sed命令格式  :sed 选项 模式 文件  其中模式如果用正则,依然需要遵循sed模式,比如sed -n '/.*bus/p' input (匹配以bus结尾的字符串)  这两个//不能少

s/   :替换时,先匹配需要替换的字符串,匹配成功后替换,[替换选项做进一步的细化;选项有w(保存) g(全局) p]

还可以加上第几次匹配,比如 sed -n 's/hello/HELLO/3p' input 将会显示第3次匹配时打印

& 符号表示保存被替换的字符串以供下面调用 比如 sed -n 's/hello/(&)/p' input  将会把匹配到的hello替换为(hello) ,和命令 sed -n 's/hello/(hello)/p' input 意义一样

注意q的用法   ;从头开始匹配并打印,如果匹配到就立即退出,不打印后续

 

=========================================以上为一些基本命令==============================================

 高级命令

n:   在下一行(注意是一行,只对一行启作用)执行下一条指令,常常与{}合用

-e {} ;  都用于多条命令

更高级用法:  sed'  #sed命令开始

    > s/hello/HELLO/

    > s/world/WORLD/

    >$d ' sed  input   #sed命令结束

执行三条命令                           

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/feihuaxx/p/3688490.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值