1 Sed操作参数

1.1 s--替换

s表示替换(substitute)文件内的字符串。

[address1],[address2]s/pattern/replacement/[flag]

# s/pattern/replacement/[flag]
# pattern--是regular expression(正则表达式)字符串。表示文件中要被替换的字符串。
# replacement:一般字符串

注意:

  1. replacement中出现一些字符有特殊意义
# &--表示其前面pattern字符串
# 下面的例子中&表示前面的pattern,就是test
# 结果是将test替换为test my car
sed -e 's/test/& my car/' file # 使用()进行分组,在使用()和[]的时候需要加\ \(\)
# \n--表示第n组,第几个\(xxx\)中间的内容
# 结果是将test my car 替换为[my car test]
sed -e 's/\(test\)\(my\)\(car\)/\[\2\3\1\]/' file
  • \1--表示test
  • \2--表示my
  • \3--表示car
  • ( \)--\的作用是还原特殊字符的含义
  • \ -- 用在语句最后表示换行
  • flag--用于控制一些替换的情况
flag 含义
g 替换所有的匹配字符
m(十进制数) 替换行内第m个合适字符串
p 替换第一个匹配字符串后,将数据标准输出
w wfile 替换第一个匹配字符串后,输出到wfile文档中,wfile不存在会进行创建
不存在 替换行内第一个字符串

例1

替换input.dat中1996字符串替换为1997,同时将这些数据存入ycar97.dat

sed -e 's/1996/1997w ycar97.dat' input.dat

1.2 d

参数d表示删除数据行

[address1],[address2]d
  • 参数d最多有两个地址进行配合执行
  • 将pattern space内匹配的数据进行删除,将下一行数据进行读入pattern space

1.3 a

参数a表示将数据添加到文件中。

[address1]a\使用者所输入的数据
  • a--最多于一个地址参数配合使用
  • --表示此行结束,用户输入的数据从下一行开始,如果数据超过一行,每行的结尾加 \
  • 当pattern space内数据输出后,sed跟着输出使用者所输入的数据

例1

添加“多任务操作系统”在含有Unix字符串的数据行后

sed -e '/Unix/a \
多任务操作系统
'input.dat

1.4 i

参数 i 表示将数据插入到文件中

[address1]i\使用者所输入的数据
  • i--最多与一个地址参数配合。
  • -- 表示当前行结束
  • 在pattern space内输出之前,sed先输出使用者所输入的数据

例1

将“文章版权属于中央研究院”,插入到input.dat文档中“院长:xxx”的数据行之前

sed -e '/院长:xxx/i\
文章版权属于中央研究院
' input.dat

1.5 c

参数c表示改变(change)文件中的数据

[address1],[address2]c\ 使用者所输入的数据
  • sed在进行pattern space内数据输出时,sed改变他成为使用者所输入的数据

1.6 p

参数p表示打印数据

[address1],[address2]p
  • sed执行打印动作--sed拷贝一份pattern space内容至标准输出文档

1.7 l

参数l,除了可以将文件中nonprinting character(不可打印字符退格、另起一行、报警)以ascii码列出,其余均与参数p的作用相同。

例1

将input.dat文档中的^[以ascii码的方式印出

# 原文
The Great ^[is a movie starring Steve McQueen. sed -e 'l' input.dat #输出
The Great \003 is a movie starring Steve McQueen.
The Great is a movie starring Steve McQueen.

1.8 r

参数r表示读入(read)其他文档的内容到当前文档中

[address1]r 其他文件名
  • r与其他文档之间只能有一个空格
  • sed在pattern space中的数据输出后,sed读出其他文档的内容跟着进行输出。当其他文档的内容不存在时,sed照样执行其他指令而不会产生任何错误信息。

1.9 w

参数w表示将文档的内容写到(write)其他文档中

[address1],[address2]w 其他文档名
  • w与其他文档名之间只有一个空格
  • 将pattern space内资料写到其他文件内,数据写如时。会overwrite原来文档中的内容。当其他文档不存在的时候,sed会create文档。

1.10 y

参数y表示转换数据中的字符

[address,[address2]]y/xyz..../abc.....
  • x,y,z,a,b,c表示某些字符为y的参数
  • x,y,z与a,b,c的个数必须相同
  • sed将pattern space中数据内的a字符转变为x,b-->y,c-->z.....

例1

将input.dat文件中的小写cba字母改写为大写CBA

sed -e 'y/cba/CBA'

1.11 !

参数!表示不执行函数参数操作

[address,[address]] !函数参数

# 删除,除了含1996字符串外所有的行
sed -e '/1996/!d' input.dat

1.12 n

参数n表示读入下一行资料

[address,[address]]n
  • 输出pattern space中数据,将下一笔资料读入到pattern space,执行下一个编辑命令。

例1

输出input.dat文件中偶数行资料。

#--------------------
input.dat中的内容如下
The
UNIX
Operation
System
#--------------------
set -n -e 'n' -e 'p' input.dat #result
UNIX
System
  • -n表示将输出控制权转到使用指令进行控制
  • 开始读入第一行(会覆盖第一行),通过n参数读入第二行,p参数输出第2行

04-Sed操作参数的更多相关文章

  1. sed高级命令

    所谓高级,主要是指这里将要提到的命令都能改变sed执行或者控制的流程顺序(sed通常都是一行被读入模式空间,并用脚本中的sed命令一个接一个的应用于那一行). 高级sed命令分成3个组: 1)处理多行 ...

  2. day18 sed

    具体功能作用: 1) 文件中添加信息的能力 (增) ok 2) 文件中删除信息的能力 (删) ok 3) 文件中修改信息的能力 (改) 4) 文件中查询信息的能力 (查) OK sed命令的语法信息 ...

  3. Ubuntu 新装服务器部署流程

    1.设定时区 rm -f /etc/localtime cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 2.配置apt-get源 sed -i ...

  4. 在Ubuntu 14.04安装和使用Docker

    Docker是一个开源软件,它可以把一个Linux应用和它所依赖的一切(比如配置文件)都封装到一个容器.然而,Docker与虚拟机不同,它使用了沙箱机制,Docker容器不运行操作系统,它共享主机上的 ...

  5. install hdp 2.2 on ubuntu 14.04

    http://www.swiss-scalability.com/2014/12/install-hdp-22-on-ubuntu-1404-trusty.html 在新加节点上运行 sed -e & ...

  6. Win7&Ubuntu12.04 双系统引导问题

    周末的时候手贱,重装系统,导致原来的ubuntu12.04和win7双系统的引导不见了,所以在此进行一下说明,如何修复. 1. win7和ubuntu12.04双系统引导修复 问题描述:    在重装 ...

  7. 在Ubuntu16.04集群上手工部署Kubernetes(未完,陆续补充中)

    主机信息 主机 IP OS k8s-master 10.10.10.20192.168.0.20 Ubuntu Server 16.04 k8s-node1 10.10.10.21192.168.0. ...

  8. Ubuntu 16.04 LTS发布

    [Ubuntu 16.04 LTS发布]Ubuntu 16.04 LTS 发布日期已正式确定为 2016 年 4 月 21 日,代号为 Xenial Xerus.Ubuntu16.04 将是非常受欢迎 ...

  9. awk sed 总结

    Awk总结笔记 介绍 90年代 new awk :nawk Linux 的是gawk 我们简化awk 用法 #  awk [options ] ‘scripts’ file1 file2 .... # ...

  10. [转]在Ubuntu 14.04安装和使用Docker

    在Ubuntu 14.04安装和使用Docker 作者:chszs,版权所有,未经同意,不得转载.博主主页:http://blog.csdn.net/chszs Docker是一个开源软件,它可以把一 ...

随机推荐

  1. 1、小程序Vant_WebApp组件库的安装步骤和简单使用

    Vant 1.小程序对于npm的支持 目前,小程序当中已经支持使用npm安装的第三方包,通过使用这些第三方包,我们可以提高对小程序开发的效率,但是在小程序当中使用所谓的npm包有如下的三个限制 不能支 ...

  2. 25.自定义mixin和基类

    很多时候业务需求并不是几个简单的mixin就可以满足,需要我们自定义mixin # get_object源码中字段查询源代码 filter_kwargs = {self.lookup_field: s ...

  3. Mysql综合实验2-LAMP+MHA+MYcat分库

    实验目标: 1.搭建主从半同步+GTID复制 2.搭建MHA主服务器高可用 3.Mycat实现分库:wordpress库和shopxo库 4.客户通过域名可以访问到wordpress和shopxo 实 ...

  4. Java Timer使用介绍

    java.util包下提供了对定时任务的支持,涉及2个类: Timer:定时器类 TimerTask:任务抽象类 使用该定时任务我们需要继承TimerTask抽象类,覆盖run方法编写任务执行代码,并 ...

  5. Python基础部分:5、 python语法之变量与常量

    目录 python语法之变量与常量 一.什么是变量与常量 1.什么是变量 2.什么是常量 二.变量的基本使用 1.代码中如何记录事物状态 2.变量使用的语法结构与底层原理 3.变量名的命名规范 4.变 ...

  6. 华为开发者大会2022:HMS Core 3D建模服务再升级,万物皆可驱动

    11月4日,HDC2022华为开发者大会在东莞松山湖举办.在本次大会的HMS Core创新图形能力分论坛中,HMS Core重点介绍了其在3D技术领域的创新应用方向,其中3D建模服务展示了创新的自动骨 ...

  7. 试试将.NET7编译为WASM并在Docker上运行

    之前有听到说Docker支持Wasmtime了,刚好.NET7也支持WASM,就带大家来了解一下这个东西,顺便试试它怎么样. 因为WASM(WebAssembly) 一开始是一个给浏览器的技术,比起J ...

  8. 这是不是你想要了解SQL的艺术,基础语法等等

    一.基础sql语句: 模块定义 基础语句 基础功能 数据定义 create table 创建数据库表 drop table 删除数据表 alter table 修改表结构 create view 创建 ...

  9. Vue3 企业级优雅实战 - 组件库框架 - 5 组件库通用工具包

    该系列已更新文章: 分享一个实用的 vite + vue3 组件库脚手架工具,提升开发效率 开箱即用 yyg-cli 脚手架:快速创建 vue3 组件库和vue3 全家桶项目 Vue3 企业级优雅实战 ...

  10. 【Java集合框架001】为什么重写equals就要重写hashcode?

    一.前言 如果面试官问:你重写过 hashcode 和 equals 么,为什么重写equals时必须重写hashCode方法? 遇到这样的问题,应该怎样回答呢?其实,equals和hashCode都 ...