一、简介

非交互式的处理 一行一行的读入处理 占用系统空间少 大文件一般用sed节省内存

语法:语法 sed [选项] '行的定位 动作' 文件...

参数 说明
-e 允许进行多项编辑
-n 静默输出 关闭模式空间的输出 不会输出未匹配的行 一般与p命令联合使用
-r 允许使用扩展正则
-i 直接作用于原文件 没有输出 在使用前先不加 看看效果
-i.bak 修改原文件前先备份
-f 后接sed脚本

二、示例

命令 说明
sed -r 's/(.)(.)/\2/' pass 删除每行的第一个字符
sed -r 's/(.)/hello\0/' pass 在每行行首插入hello
sed -r 's/(.)(.)/\1/' pass 删除每行的第二个字
sed -r 's/[0-9]/(\0)/g' pass 把每个数字用()括起来 如:(1)(2)
sed -r 's/[0-9]+/(\0)/g' pass 把每个数值用()括起来 如:(12)
sed -r 's/(.)(.)$/\2/g' pass 删除每行的倒数第二个字符
sed -r 's/(.)(.*)(.)/\3\2\1/g' pass 交换每行的第一个和最后一个字符
sed -r 's/<[a-zA-Z]{3}>//g' pass 删除刚好三个字符的单词
sed -r 's/ro | da/A/g' pass 把ro或da替换成A
sed -r 's/[a-zA-Z]+//' pass 删除每行的第一个单词(纯字母)
sed -r 's/([a-zA-Z]+)(.*)(<[a-zA-Z]+)(a-zA-Z)([a-zA-Z]+)$/\3\2\1\4\5/g' pass 交换第一个和倒数第二个单词(纯字母)
sed 's/root/ROOT/2' /tmp/passwd 把第二个root替换成ROOT
sed 's/root/ROOT/g2' /tmp/passwd 把每一行第二个开始的root替换成ROOT
cat -n /etc/passwd > /tmp/pass 将passwd编号写入到pass
cat -n /etc/passwd | head >/tmp/pass 将passwd前十行编号写入到pass
sed -r 's/\b[a-zA-Z]{4}\b/AAAA/g' pass 将刚好4个字符的单词替换成AAAA (abcd)
sed 's/b{4}/AAAA/g' pass 将bbbb替换成AAAA

三、加参数示例

命令 说明
sed -nr '/^root/p' /tmp/pass 以root开头行
sed -n '1~2p' /xx/xx 打印奇数行
sed -n '2~2p' /xx/xx 打印偶数行
sed -n -e '2p' -e '5p' /tmp/pass 2 5行
sed -n -e '2p;5p' /tmp/pass 2 5行
sed -n -e '2,5p' /tmp/pass 2-5行
sed -nr '/sh/,/xx/p' /tmp/pass 以sh开始 以xx结尾
sed -n -f sed.sh /tmp/pass 接sed脚本
sed '1!d' passwd 删除除第一行以外的所有行
sed '/root/ w /tmp/a.txt' passwd 将passwd含root的行写入到/tmp/a.txt里
sed '2 i hello' passwd 在第二行前面插入hello
sed 'y/abc/ABC/' passwd 将passwd里的abc一一对应替换成ABC
sed 's/[a-z]/\u&/g' passwd 小写字母换成大写字母
sed 's/[A-Z]/\l&/g' passwd 大写字母换成小写字母
sed '2 a hello' passwd 在第二行后面追加hello
sed '2 c hello' passwd 将第二行替换成hello
sed -n '2{n;p}' passwd 打印第二行的下一行
sed '8q' passwd 处理第8行后退出sed

四、模式空间,保留空间

模式空间:用于处理文本行

保留空间:用于保存已处理完的文本行 最大保存8192字节 默认有一个空行

命令:d  删除模式空间里的内容,开始下一个循环

   h H 复制/追加模式空间的内容到保留空间

   g G 复制/追加保留空间的内容到模式空间

   x  交换保留空间和模式空间的内容

命令 说明
sed '1h;1d;2G' passwd 将第一行第二行替换输出
sed '1h;1d;2G;2h;2d;3G' passwd 输出3 2 1行 2G后2 1行为一个整体2行
sed '1,$ a \ ' passwd sed 'G' pass 每行后面加上空行
sed '1h;1d;2,9{G;h;d;};10G ' passwd 从末尾往上查看文件 
sed '1!G;$!h;$!d' pass
sed -r '1h;2~2G ' passwd 在偶数行下添加第一行的内容
sed '/sh$/ r /etc/redhat-release' pass 在sh结尾的行下方插入文件内容

五、匹配换行符与空格

5.1 换行符

sed ":label;N;s/\n/ /;b label" test.txt

正常情况下sed无法匹配换行符,这是因为sed 模式是以\n换行符作为行的结束标记的

label:    这是一个标签,用来实现跳转处理,名称可自取,后面的 b label 就是跳转指令

N:        N是sed的一个处理命令,追加文本流中的下一行到模式空间进行合并处理,因此是换行符可见

s/\n/ /:  替换命令,将换行符替换成空行

b label:  b是sed的跳转命令,跳转到指定的标签处

5.2 空格

使用 \s 或者 [[:space:]] 表示

sed 's/[[:space:]]/,/g' test1.txt
sed 's/\s/,/g' test1.txt

sed 流编辑器的更多相关文章

  1. Linux三剑客之sed流编辑器

    一.功能说明 Sed是Stream Editor(流编辑器)缩写,是操作.过滤和转换文本内容的强大工具.常用功能有增删改查,过滤,取行. 二.语法格式 Usage: sed [options] [se ...

  2. 【Shell案例】【!~//、grep反向查找、sed流编辑器】13、去掉所有包含this的句子

    描述写一个 bash脚本以实现一个需求,去掉输入中含有this的语句,把不含this的语句输出示例:假设输入如下:that is your bagis this your bag?to the deg ...

  3. Linux下的sed流编辑器命令详解

    sed是stream editor的简称,也就是流编辑器.它一次处理一行内容,处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内 ...

  4. Linux sed 流编辑器

    sed是stream editor的简称,也就是流编辑器.盗用一张图片解释原理 命令格式: SYNPPSIS: sed [OPTION]… {script-only-if-no-other-scrip ...

  5. sed流编辑器

    一.前言 (一).sed 工作流程 sed 是一种在线的.非交互式的流编辑器,它一次处理一行内容.处理时,把当做前处理的行存储在临时缓存区中,成为“模式空间”(pattern space),接着用se ...

  6. Shell:sed流编辑器

    转载:http://blog.sina.com.cn/s/blog_ac9fdc0b0101lvdv.html sed和awk是永远地痛,学了又忘,主要是木有横向对比过,所以总把握不到精髓.它可以完美 ...

  7. SED单行脚本快速参考(Unix 流编辑器)(转)

    sed.sourceforge.net被封杀,特在此处贴上官方的sed 使用说明文档 SED单行脚本快速参考(Unix 流编辑器) 2005年12月29日 英文标题:USEFUL ONE-LINE S ...

  8. SED单行脚本快速参考(Unix 流编辑器)

    ------------------------------------------------------------------------- SED单行脚本快速参考(Unix 流编辑器) 200 ...

  9. Shell 基础 -- 流编辑器 sed 详解

    一.流编辑器 sed 与命令 sed Linux 中,常使用流编辑器 sed 进行文本替换工作.与常使用的交互式编辑器(如vim)不同,sed 编辑器以批处理的方式来编辑文件,这比交互式编辑器快得多, ...

  10. sed:轻量级流编辑器

    一. sed命令 sed是一种几乎包括在所有UNIX平台(包括Linux)的轻量级流编辑器.sed主要是用来将数据进行选取.替换.删除.新增的命令 注意:vi命令只能修改文件,但不能修改命令的结果,如 ...

随机推荐

  1. typeid关键词

    typeid是c++的关键字,typeid操作符的返回结果是名为type_info的标准库类型的对象的引用(在头文件typeinfo中定义) ISO C++标准并没有确切定义type_info,它的确 ...

  2. L2-028 秀恩爱分得快

    90行,调了俩小时,大约有以下坑点. 1.每个数字都可能正负出现,比如-0 0,-1 1,一开始以为一个数的正负只会出现一个. 2.当俩人都不出现在照片中,那么输出俩人就行 3.当其中一个人不在照片里 ...

  3. 由后缀表达式题目:stoi atoi 函数新发现

    洛谷上的题:有些·表示一个操作结束~假装没看到 1 #include<iostream> 2 #include<stack> 3 #include<string> ...

  4. 通过shell定时去创建数据月份表

    对于大数据的采集推送,有时为了方便会将一张大表的数据按照月份分别存储,尤其是在与流水表相关的业务情况,因此需要定时按照月份去创建表. 我有问过是否可以通过数据库的存储过程和事件触发器实现,得到的回答是 ...

  5. 使用CEF(七)详解macOS下基于CEF的多进程应用程序CMake项目搭建

    由于macOS下的应用程序结构导致了CEF这样的多进程架构程序在项目结构.运行架构上有很多细节需要关注,这一块的内容比起Windows要复杂的多,所以本文将会聚焦macOS下基于CEF的多进程应用架构 ...

  6. 聊一聊Rust的enum

    enum在实际编程中是非常常用的,enum的目的就是为了清晰定义出散落在系统各个角落的相同概念的有限固定值. 一.enum介绍如果是简单定义固定值,我们可以使用常量const.比如 public co ...

  7. Vue重用组件

    1.是什么? 这里主要是简单入门使用一下,复杂高阶的用法笔者暂时还没了解到 Vue重用组件是指可以被多个Vue实例重复使用的组件.这些组件可以包含自定义的状态和事件处理程序,并且可以在整个应用程序中共 ...

  8. 深入 K8s 网络原理(一)- Flannel VXLAN 模式分析

    目录 1. 概述 2. TL;DR 3. Pod 间通信问题的由来 4. 测试环境准备 5. 从 veth 设备聊起 6. 网桥 cni0 6.1 在 Pod 内看网卡信息 6.2 在 host 上看 ...

  9. 文心一言 VS 讯飞星火 VS chatgpt (162)-- 算法导论13.1 2题

    二.用go语言,对图13-1中的红黑树,画出对其调用TREE-INSERT 操作插人关键字 36 后的结果.如果插人的结点被标为红色,所得的树是否还是一棵红黑树?如果该结点被标为黑色呢? 文心一言,代 ...

  10. lca(数链剖分)板子

    #include<bits/stdc++.h> #define endl '\n' #define int long long using namespace std; const int ...