Sed 日常使用介绍
Sed 日常使用介绍
简介
sed 是 unix 环境下常用的流处理工具, 可以处理字符流, 文件或者二进制文件流。
各个 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.
参考文档
- GNU Sed Manual - sed, a stream editor
- Sed - An Introduction and Tutorial by Bruce Barnett
- panix.com - Sed Tutorials
- Advanced Bash-Scripting Guid: Appendix C.1. Sed
Sed 日常使用介绍的更多相关文章
- sed命令使用介绍(转载)
sed命令介绍 (转自:http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2856901.html) 简介 sed 是一种在线编辑器,它一次处理一 ...
- sed命令的介绍
命令格式 sed [options] 'command' file(s) sed [options] -f scriptfile file(s) 选项 -e<script>或--expre ...
- sed命令使用记录
背景:文件A,文件B,文件格式一致,有两列,第一列为key,第二列为value. 目的:将文件A中的内容插入到文件B中,不能在最后,不能有重复key(我的key和value用tab键分割) 实现:我的 ...
- Linux sed命令使用方法
sed(Stream Editor)是Linux中文本处理使用非常广泛的工具,可以对文件内容进行替换.删除.新增.选取特定行等功能.下面通过sed常用实例介绍sed命令的使用方法. sed基本语法 s ...
- shell编程之sed编辑器&gawk程序
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://twentyfour.blog.51cto.com/945260/560372 s ...
- Linux基础入门
第一节,linux系统简介 一.实验内容 了解 Linux 的历史,Linux 与 Windows 的区别等入门知识. 二.实验要求 阅读linux简介与历史 三.实验步骤 (一).Linux 为何物 ...
- Linux 第一次学习笔记
一.Linux 为何物 Linux 就是一个操作系统,就像你多少已经了解的 Windows(xp,7,8)和 Max OS ,至于操作系统是什么,就不用过多解释了,如果你学习过前面的入门课程,应该会有 ...
- 《信息安全系统设计基础》第一次实验报告--Linux 基础入门
北京电子科技学院(BESTI) 实 验 报 告 课程:信息安全设计基础 班级:1352 姓名:何伟钦 学号:20135223 成绩: 指导教师:娄嘉鹏 ...
- Linux 读书笔记 一
一.Linux 简介 实验介绍 本节主要介绍 Linux 的历史,Linux 与 Windows 的区别等入门知识.如果你已经有过充分的了解,可以跳过本节,直接进入下一个实验. 一.Linux 为何物 ...
- Linux基础入门学习笔记20135227黄晓妍
学习计时:共24小时 读书:1小时 代码:8小时 作业:3小时 博客:12小时 一.学习目标 1. 能够独立安装Linux操作系统 2. 能够熟练使用Linux系统的基本命令 3. 熟练使用L ...
随机推荐
- Djangorestframework 记录一个报错 -- rest_framework.authentication.ToKenAuthentication
今天在使用 Djangorestframework 这个框架时,发生报错: ImportError: Could not import 'rest_framework.authentication.T ...
- 第十六篇:jQuery基础
一.jQuery和Dom的关系 http://jquery.cuishifeng.cn/ 模块,类库 DOM/BOM/JavaScript的类库: 二.jQuery选择器 1.查找元素 DOM: 10 ...
- 抓包整理————tcp 三次握手性能优化[十]
前言 tcp 三次握手性能优化. 正文 服务器三次握手流程示例: 下面就是3次握手的过程: 知道这个有什么用呢? 我举一个我使用到的例子哈. 比如有很多 tcp 连接到一台机器上机器上,那么tcp_m ...
- nginx 学习的前提
前言 在nginx 中,需要学会的是如何安装.基础的命令.看懂配置那么这时候才是一切的刚刚开始. 正文 安装可以去看菜鸟驿站的: https://www.runoob.com/linux/nginx- ...
- vue中执行异步函数async和await的用法
在开发中,可能会遇到两个或多个函数异步执行的情况,对于Vue中函数的异步函数执行做了一个小总结,如下: 异步执行使用async和await完成 created() { this.init() }, m ...
- MAC上Cisco AnyConnect删除不干净,造成无法重新安装的解决办法
1.问题 由于直接删除而不是正常卸载,导致文件残留,无法正常安装,并且软件不可用 2.解决 2.1 终端运行命令 pkgutil --pkgs|grep com.cisco 查看cisco残留的文件 ...
- 什么是token,为什么需要token
1.为什么需要token 随着互联网的发展,为了更安全,以及更好的用户体验,逐渐产生了token这个技术方案 之所以使用token是因为http/https协议本身是无状态的,不能进行信息的存储 (c ...
- 【Oracle】Oracle常用分析函数(排名)
Oracle常用分析函数(排名) 一般来说,遇到需要对数据进行排序的时候,可以使用分析函数,一般常用的有三个,rank,dense_rank,row_number --Oracle常用分析函数(排名) ...
- 力扣197(MySQL)-上升的温度(简单)
题目: 表: Weather 编写一个 SQL 查询,来查找与之前(昨天的)日期相比温度更高的所有日期的 id . 返回结果 不要求顺序 . 查询结果格式如下例. 解题思路: 方法一:使用窗口函数la ...
- 第 4章 用 CSV 和 Excel 存储数据
第4章 用 CSV 和 Excel 存储数据 4.1 用 CSV 文件存储数据 CSV(Comma-Separated Values)其实就是纯文本,用逗号分隔值,可以分隔成多个单元格.CSV 文件除 ...