Sed 日常使用介绍

简介

sedunix 环境下常用的流处理工具, 可以处理字符流, 文件或者二进制文件流。

各个 unix/linux 发行版都会配备 sed 及其衍生的命令工具, 因此, 掌握该工具的基本用法, 足以满足我们日常的许多文本处理的任务。

以下采用示例的方式对 sed 进行基本用法介绍. 如果有兴趣了解更高级的使用技巧,

本文采用的是 GNU sed 4.4 版本进行示例介绍, 以下示例可在 GNU bash 4.4.20(1) 版本下运行。

请参阅 参考文档

文章约定

  • 本文采用命令行示例来讲解用法, 格式如下:

    • ### 开头内容均为注释
    • $ 开头内容均为命令行
    • 顶格开头内容均为命令执行后输出结果

Sed 日常基本用法

Sed 打印/输出

  • 打印出匹配条件的内容
### -n 选项代表只打印匹配的行
### 如果没有 -n 选项, 则会打印所有输入内容, 同时再打印匹配的内容
$ echo -e "hello\npython\nphp" | sed -n -e '/python/p' python
  • 打印第 3 行内容
$ echo "hello
python
and
php" | sed -n -e '3 p'
  • 打印第 1~2 行内容
$ echo -e "hello\npython\nphp" | sed -e '1,2p' sample.txt

hello
python
  • 输出 1~7 数字序列,每行一个数字,每3行替换数字为 x
$ seq 7 | sed -e 'n; n; s/./x/g'

1
2
x
4
5
x
  • 不打印第 2~3 行
$ echo "hello
world
python" | sed -n -e "2,3! p"
  • 打印从第 1 行开始, 第 n 次输出行为 1 + n * 3 的行
$ seq 10 | sed -n -e '1~3p'

1
4
7
10

Sed 删除

  • 删除包含 python 的行, 忽略大小写
### /regex/ regex 是正则, I 表示忽略大小写, d 表示删除匹配内容
$ echo -e "hello\npython 2.7\nphp\nPython 3\nIPython\nC++" | sed -e '/python/Id' hello
php
C++
  • 删除第 2 行
$ echo -e "hello\npython 2.7\nphp\nPython 3" | sed -e '2d'

hello
php
Python 3
  • 删除 2~3 行
$ echo -e "hello\npython 2.7\nphp\nPython 3\nIPython\nC++" | sed -e '2,3d'

hello
Python 3
IPython
C++
  • 从第 2 行删除到最后一行
$ echo -e "hello\npython 2.7\nphp\nPython 3\nIPython\nC++" | sed -e '2,$d'

hello
  • 删除所有空行
$ echo "hello,

world.
hello, python." | sed -e '/^\s*$/d' hello,
world.
hello,
python.

Sed 替换

Sed 替换命令格式

替换命令格式: [address range]s/regex/replacement/[flags]

  • s: 表示替换命令
  • regex: 正则表达式
  • replacement: 替换内容. & 可以获取匹配的内容, \N 可以获取匹配分组的内容, \1 可以获得正则匹配到的分组内容第一个元素
  • flags:
  • g - 全部替换
  • 其他请参考 manual (如: 命令行 man sed)
Sed 替换示例
  • 替换第一个 cat 为 dog
$ echo -e "I like cat but you don't like cat!" | sed -e 's/cat/dog/'

I like dog but you don't like cat!
  • 替换所有的 cat 为 dog
$ echo -e "Everyone like cat and I like cat too!" | sed -e 's/cat/dog/g'

Everyone like dog and I like dog too!
  • 在所有包含 cat 的行中, 替换 python 为 php
$ echo "Tom like cat and python.
James like dog and python.
Kate like cat and php." | sed -e '/cat/ s/python/php/g' Tom like cat and php.
James like dog and python.
Kate like cat and php.
  • 在所有不包含 cat 的行中, 替换 python 为 php.
### 注意 ! 和 s 之间需要有空格. /cat/! 标示匹配 /cat/ 范围之外的行
### 同理, 1,2! 标示不要第 1 到 第 2 行
$ echo "Tom like cat and python.
James like dog and python.
Kate like cat and php." | sed -e '/cat/! s/python/php/g' Tom like cat and python.
James like dog and php.
Kate like cat and php.
  • 在第 2~3 行中, 替换 python 为 php
$ echo "I like python.
James like python too.
Kate like go and python." | sed -e '2,3s/python/php/g' I like python.
James like php too.
Kate like go and php.
  • 在正则替换表达式中, 使用其他字符替换 '/' 作为分隔符
### 替换目录 '/aaa/bbb' 为 '/var/log', 使用 | 作为分隔符
$ echo "/aaa/bbb/ccc" | sed -e 's|/aaa/bbb|/var/log|g' /var/log/ccc
  • 使用正则匹配的内容进行替换
$ echo "Hello, I like python" | sed -e 's/python/& and php/'

Hello, I like python and php
  • 获取正则匹配的分组内容的第一部分
$ echo "Hello, I like python" | sed -e 's/\(python\)/\1 and php/'

Hello, I like python and php

Sed 一对一转换特定字符

  • 把 a e i o 字母一一转换为 A E I O
$ echo "I like python and php." | sed -e 'y/aeio/AEIO/'

I lIkE pythOn And php.

Sed 替换文件内容

  • 直接替换文件内容, 把所有包含 python 的行删除.
### -i[backup_suffix] 后面紧跟着备份文件名后缀名.
### 如果 [backup_suffix]为 '' 空字符串,则表示直接替换原始文件内容,不备份
$ cat sample.txt
Hello
world.
I like python and php.
$ sed -i'' -e '/python/d' sample.txt
$ cat sample.txt
Hello
world.

参考文档

Sed 日常使用介绍的更多相关文章

  1. sed命令使用介绍(转载)

    sed命令介绍 (转自:http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2856901.html) 简介 sed 是一种在线编辑器,它一次处理一 ...

  2. sed命令的介绍

    命令格式 sed [options] 'command' file(s) sed [options] -f scriptfile file(s) 选项 -e<script>或--expre ...

  3. sed命令使用记录

    背景:文件A,文件B,文件格式一致,有两列,第一列为key,第二列为value. 目的:将文件A中的内容插入到文件B中,不能在最后,不能有重复key(我的key和value用tab键分割) 实现:我的 ...

  4. Linux sed命令使用方法

    sed(Stream Editor)是Linux中文本处理使用非常广泛的工具,可以对文件内容进行替换.删除.新增.选取特定行等功能.下面通过sed常用实例介绍sed命令的使用方法. sed基本语法 s ...

  5. shell编程之sed编辑器&gawk程序

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://twentyfour.blog.51cto.com/945260/560372 s ...

  6. Linux基础入门

    第一节,linux系统简介 一.实验内容 了解 Linux 的历史,Linux 与 Windows 的区别等入门知识. 二.实验要求 阅读linux简介与历史 三.实验步骤 (一).Linux 为何物 ...

  7. Linux 第一次学习笔记

    一.Linux 为何物 Linux 就是一个操作系统,就像你多少已经了解的 Windows(xp,7,8)和 Max OS ,至于操作系统是什么,就不用过多解释了,如果你学习过前面的入门课程,应该会有 ...

  8. 《信息安全系统设计基础》第一次实验报告--Linux 基础入门

    北京电子科技学院(BESTI) 实     验    报     告 课程:信息安全设计基础 班级:1352  姓名:何伟钦  学号:20135223 成绩:            指导教师:娄嘉鹏 ...

  9. Linux 读书笔记 一

    一.Linux 简介 实验介绍 本节主要介绍 Linux 的历史,Linux 与 Windows 的区别等入门知识.如果你已经有过充分的了解,可以跳过本节,直接进入下一个实验. 一.Linux 为何物 ...

  10. Linux基础入门学习笔记20135227黄晓妍

    学习计时:共24小时 读书:1小时 代码:8小时 作业:3小时 博客:12小时 一.学习目标 1. 能够独立安装Linux操作系统   2. 能够熟练使用Linux系统的基本命令   3. 熟练使用L ...

随机推荐

  1. Prometheus AlertManager 生产实践-直接根据 to_email label 发 alert 到对应邮箱

    概述 通过之前的文章 - Prometheus Alertmanager 生产配置趟过的坑总结, 我们已经知道 AlertManager 作为告警平台,是非常强大的,可以去重 (deduplicati ...

  2. windows下redis主从配置

    1,复制两个redis文件夹,粘贴在同级目录下 2,分别修改6380和6381文件夹中的redis.window.conf文件 port:分别改为6380.6381 均增加:slaveof 127.0 ...

  3. SpringBoot使用Redis做缓存结合自带注解

    配置Spring Cache <dependency> <groupId>org.springframework.boot</groupId> <artifa ...

  4. llm构建数据标注助手

    为什么要用LLM构建数据标注工具 在LLM出现之前,传统的深度学习模型(包括CV和NLP)就已经需要大量的数据进行训练和微调.没有足够的数据,或者数据需要进行二次加工(比如标签标注),这些问题都成为限 ...

  5. C#的窗体假关闭操作例子 - 开源研究系列文章

    晚上编码的时候,想到了以前编写的窗体关闭的事情,就是带托盘图标的应用,有一个主显示操作窗体,但是主窗体点击关闭按钮的时候,实际上是窗体隐藏而非真正关闭,这个在其它的一些应用程序里有这个效果.于是就想到 ...

  6. 【pytorch学习】之概率

    6 概率 简单地说,机器学习就是做出预测.根据病人的临床病史,我们可能想预测他们在下一年心脏病发作的概率.在飞机喷气发动机的异常检测中,我们想要评估一组发动机读数为正常运行情况的概率有多大.在强化学习 ...

  7. 阿里云基于全新 RocketMQ 5.0 内核的落地实践

    简介: 本篇文章的核心就消息架构以及产品能力的云原生化,介绍了阿里云是如何基于全新的 RocketMQ 5.0 内核做出自己的判断和演进,以及如何适配越来越多的企业客户在技术和能力方面的诉求. 前言 ...

  8. 连续两年入选Gartner公共云容器,阿里云在边缘容器方面做了什么?

    最近,Gartner发布了2020年公共云容器报告,阿里云连续两年成为唯一入选的中国企业.报告显示,阿里云容器服务在中国市场表现强劲,产品形态丰富,在 Serverless 容器.服务网格.安全沙箱容 ...

  9. Vite + React 组件开发实践

    简介: 毫不夸张的说,Vite 给前端带来的绝对是一次革命性的变化.或者也可以说是 Vite 背后整合的 esbuild . Browser es modules.HMR.Pre-Bundling 等 ...

  10. 唯品会:在 Flink 容器化与平台化上的建设实践

    简介: 唯品会 Flink 的容器化实践应用,Flink SQL 平台化建设,以及在实时数仓和实验平台上的应用案例. 转自dbaplus社群公众号作者:王康,唯品会数据平台高级开发工程师 自 2017 ...