文本三剑客之sed

2023-11-03

sed简介

sed 是Linux中提供的一个外部命令,他是一个行(流)编辑器,非交互式的对文件内容进项增删改查操作,那它和文本编辑器有什么区别呢?

区别是:
文本编辑器:编辑对象是文件
行编辑器:编辑对象是文件中的行

也就是前者一次处理一个文本,而后者是一次处理文本中的一行内容,这个应该搞清楚,否则可能无法理解sed的运行原理和使用精髓。

在这里插入图片描述

sed命令

语法:sed [opention] '{command}{flags}'[filename]
# 命令选项:
-r                   支持正则表达式
-i                   编辑文件内容
-i.bak				 备份
-n                   抑制自动输出 只显示匹配出的行
!					 取反(跟在模式条件后与shell有所区别)
=                    显示文件行号
-e script            多条件编辑
-f script            指定sed脚本

# sed常用内部命令
a                    在匹配后面添加
i                    在匹配前面添加
p                    打印
d                    删除
s					 替换
c					 更改
y                    转换 N D P

# flags
标志是对命令不足的补充
数字                  表示替换的第几个
g:                   表示全文替换
p:                   表示打印原始内容
w filename:          将替换内容结构写入文件中

常用内部命令案例演示:

# 演示数据内容:
1 you are a pig pig
2 you are a pig
3 you are a pig
4 you are a pig
5 you are a pig
6 you are a pig
good good study day day up
10086
10086+1
I remember that day she got married
三个空格
 三个tab建
Good afternoon everyone
you are a good man
Study hard for your future
How are you?
yuwenkedaibiao
I'm fine,thanks
go TO bed
are you ok?
It's been a long day without you my friend
You jump ,I jump!
one day ,'your girl will go '. Just because you have noting.
"you cried to me,'fairy tales are deceptive'"
\\\\\
//
()()()()()
"how do you"

追加:

# 1、在每一行后面追加 hello world
sed 'a\hello world' data

# 2、在每一行前面追加
sed 'i\hello world' data

# 3、匹配到3 you字段内容后追加hello world
sed '/3 you/a\hello world' data

#4、在2-4行后面追加 hello world
sed '2,3 a\hello world' data

删除:

# 1、删除第2行内容
sed '2d' data

# 2、删除2-3行内容
sed '2,3d' data 

# 3、删除匹配到的内容
sed '/6 you/d' data

# 4、删除nginx配置文件以#开头 包含# 空行
sed  -r '/(^$|^#|#)/d' nginx.conf

# 5、删除指定行到下2行之间的内容,比如删除第3行到下两行之间的内容
sed   '3,+2d' data

# 6、删除第3行到最后行
sed '3,$d' data

# 7、删除最后一行
sed '$d' data

# 8、取反 不删除最后一行 其余全部删除
sed  -r '$!d' data 

替换:

# 1、将pig到的内容替换为dog
sed 's/pig/dog/' data 

# 2、3-4行pig到内容替换为dog
sed '3,4 s/pig/dog/' data

# 3、将匹配到的内容替换为dog
sed '/6 you/ s/pig/dog/' data

# 4、全局替换(默认只会替换一行中第一个匹配到的内容,全部替换则需要后面添加g即可!)
sed '/1 you/ s/pig/dog/g' data

# 5、默认只会替换一行中第一个匹配到的内容,现在只替换地2个
sed -n  's/pig/PIG/2p' data

# 6、

更改:

# 将匹配行 更改为qinziteng666  (不是追加 而是将内容更改)
sed  '/1 you/ c\qinziteng666' data 

转换:

转换是将内容 一一相对应的 进行转换 新的字符必须和旧的字符长度相同,否则无法使用

# 将匹配到的字符转换为大写
sed '2,3 y/pig/PIG/' data

# 将 abcd 转化为 1234
sed '1,3 y/ascd/1234/' data 

打印:

打印会将匹配到的行 打印两遍,因为sed把文件内容打印了一遍,又将匹配到的行打印一遍!

# 1、打印所有
sed "p" data

# 2、打印2-3行
sed "2,3p" data

# 3、打印匹配到的行 并且只打印匹配到的内容
sed  -n "/1 you/p" data

# 4、当用到sed不同的编辑命令时,可以用{ },不同的编辑命令之间用分号隔开
sed -n '/the/{=;p}' data

flags案例演示:

数字表示替换的第几个:

# 将第一行 第二个pig改为dog
sed '1 s/pig/dog/2' data

全文替换:

# 将第一行 pig全部替换为dog
sed '1 s/pig/dog/g' data

将修改内容写入到其他文件中

# 将匹配到的内容写入到 1.txt文件中
sed   '1 s/pig/dog/gw 1.txt' data 

命令选项演示:

备份 -i.bak:

# 修改原文件前 先备份
sed -i.bak '1 s/pig/dog/g' data 

只输出匹配行 -n:

# 只输出匹配行
sed -n '1 s/dog/pig/gp' data

小技巧:

# 统计nginx配置文件有多少行
sed -n '$=' nginx.conf
# 只输出匹配行
sed -n '1 s/dog/pig/gp' data

多条件 -e

# 以;隔开条件
sed -e '1s/dog/DOG/2;2s/pig/PIG/g' data
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

文本三剑客之sed 的相关文章

  • 用于读取文件的 Bash 脚本

    不知道为什么最后一行没有从脚本中删除 bin bash FILENAME 1 while read line do cut d f2 echo line done lt FILENAME cat file 1 test 2 test 3 t
  • uwsgi协议比http协议快吗?

    我正在尝试部署 django 应用程序的各种设置 我的第一选择是使用带有 mod wsgi 的简单 apache 服务器 我之前已经实现了该服务器供私人使用 由于当前的部署是供公众使用的 因此我正在考虑各种选择 根据网上提供的信息 使用 n
  • 裸机交叉编译器输入

    裸机交叉编译器的输入限制是什么 比如它不编译带有指针或 malloc 的程序 或者任何需要比底层硬件更多的东西 以及如何才能找到这些限制 我还想问 我为目标 mips 构建了一个交叉编译器 我需要使用这个交叉编译器创建一个 mips 可执行
  • 在 Linux 控制台中返回一行?

    我知道我可以返回该行并用以下内容覆盖其内容 r 现在我怎样才能进入上一行来改变它呢 或者有没有办法打印到控制台窗口中的特定光标位置 我的目标是使用 PHP 创建一些自刷新的多行控制台应用程序 Use ANSI 转义码 http en wik
  • 完整的 C++ i18n gettext()“hello world”示例

    我正在寻找完整的 i18ngettext 你好世界的例子 我已经开始了一个基于的脚本使用 GNU gettext 的本机语言支持教程 https web archive org web 20130330233819 http oriya s
  • 在非实时操作系统/内核上执行接近实时任务的最佳方法是什么?

    在一台 GNU Linux 机器上 如果想要执行 实时 亚毫秒级时间关键 任务 您几乎总是必须经历漫长 复杂且容易出现问题的内核补丁过程 以提供足够的支持 1 http en wikipedia org wiki RTLinux Backg
  • 如何在文件夹中的 xml 文件中 grep 一个单词

    我知道我可以使用 grep 在这样的文件夹中的所有文件中查找单词 grep rn core 但我当前的目录有很多子目录 我只想搜索当前目录及其所有子目录中存在的所有 xml 文件 我怎样才能做到这一点 我试过这个 grep rn core
  • shell解析json并循环输出组合变量

    杰斯克喜欢我之前的话题 https stackoverflow com questions 74063588 shell parsing json contains spaces in string 我知道如何解析带有空格的简单 json
  • 如何将 elf 解释器(ld-linux.so.2/ld-2.17.so)构建为静态库?

    如果我的问题不准确 我深表歉意 因为我没有太多 Linux 相关经验 我目前正在构建一个 Linux 从头开始 主要遵循 linuxfromscratch org 版本的指南 7 3 我遇到了以下问题 当我构建可执行文件时 获取一个称为 E
  • 如何使用 bash 中提供的工具生成一系列非周末日期?

    我想生成一个文件列表 其中名称包含 filename date 例如file 20111101 file 20120703 开始November 1 2011直到今天 应该不包括周末 Thanks 2011年试试这个 for y in 20
  • PHP exec rm -Rf 不适用于子目录

    我试图删除特定文件夹中的所有内容 但它似乎不会影响子文件夹 但它应该 因为 bash 命令是从控制台执行的 system rm Rf some dir 该命令中不需要星号 如果要与文件一起删除目录 请同时删除斜杠 留下斜杠将删除文件 但保留
  • 在 bash 中,如何除以两个变量并输出四舍五入到小数点后 5 位的答案? [复制]

    这个问题在这里已经有答案了 我将两个变量作为输入 将它们相除后 我希望将输出四舍五入到小数点后 5 位 我已经尝试过这种方法 gt sum 12 n 7 output scale 5 sum n bc echo output 我的代码没有显
  • 在 C# 中编写批处理脚本的好方法是什么?

    我想用 C 编写简单的脚本 我通常会使用 bat 或 4NT btm 文件 复制文件 解析文本 询问用户输入等等 相当简单 但在批处理文件中正确执行这些操作确实很困难 例如没有例外 我熟悉像 AxScript 这样的命令行 脚本 包装器 这
  • 连接到上游时 Django Gunicorn nginx(111:连接被拒绝)

    一个Django应用程序在AWS实例上运行 通过gunicorn和nginx配置 它运行良好一年多了 但是突然 我收到了502 bad gateway错误 然后我在nginx错误日志中看到了下面提到的消息 2017 05 17 16 18
  • 亚马逊 Linux - 安装 openjdk-debuginfo?

    我试图使用jstack在 ec2 实例上amazon linux 所以我安装了openjdk devel包裹 sudo yum install java 1 7 0 openjdk devel x86 64 但是 jstack 引发了异常j
  • 如何回忆上一个 bash 命令的参数?

    Bash 有没有办法回忆上一个命令的参数 我通常这样做vi file c其次是gcc file c Bash 有没有办法回忆上一个命令的参数 您可以使用 or 调用上一个命令的最后一个参数 Also Alt can be used to r
  • Docker 网络 - nginx:[emerg] 在上游找不到主机

    我最近开始迁移到 Docker 1 9 和 Docker Compose 1 5 的网络功能来取代使用链接 到目前为止 通过链接 nginx 通过 docker compose 连接到位于一组中不同服务器中的 php5 fpm fastcg
  • 如何使用 VSCode 调试 Linux 核心转储?

    我故意从我使用 VSCode 编写的 C 应用程序生成核心转储 我不知道如何调试核心转储 有没有人愿意分享这方面的经验 更新 我相信我现在已经可以使用了 我为核心文件创建了第二个调试配置 我需要添加指向生成的转储文件的 coreDumpPa
  • 在 Nginx 中使用查询参数绕过基本身份验证

    在我的 nginx 配置中 我打开了基本身份验证来限制对站点的访问 如下所示 auth basic Restricted Area auth basic user file path to htpasswd 这适用于用户 但我们使用的一些工
  • Nginx 在子文件夹中重写 (404)

    我有一个网站主机NGINX曾经工作正常的服务器删除index php在 nginx 站点配置中使用try files 但现在我要在上面添加一个博客 其中 URL 将是www foo com blog 我可以访问博客并使用index php

随机推荐

  • liquibase报错 waiting for changelog lock

    今天项目启动控制台突然卡住 liquibase一直在打印 waiting for changelog lock 这可能是由于一个被杀死的liquibase进程未在DATABASECHANGELOGLOCK表上释放其锁定 通过以下方法解决 查
  • Essential Google Cloud Infrastructure: Foundation

    最后更新2022 03 08 有点事情 中断了几天 继续GCP GCP Fundamental看完了 但是lab还没做 翻墙越脊的 太麻烦 过些时候方便了一起练习 继续学习下一课 essential系列其实是再走一遍fundamentals
  • python21天打卡Day10-string和bytes互转

    a 21 python b a encode utf 8 string转为bytes print format b type b c b 21 python d c decode utf 8 print format d type d D
  • Gstreamer推送摄像头数据到RTMP服务器的方法(SRS成功示例)

    最近在研究如何将Linux中的视频数据推送到流媒体服务器 看到gstreamer还比较不错 于是试了一下 服务端用的SRS RTMP推流 搭建非常简单 教程可参考 https blog csdn net qq 52514123 articl
  • sort根据结构体中某一元素进行排序

    先看一下简单的sort全排序 int a 100 for int i 1 i lt 10 i scanf d a i sort a a 10 OK 排完了 但是 想根据结构体的一个元素 对结构体数组排序 看完下面例题 多思考 例题 FatM
  • CoordinatorLayout 的滑动监听--自定义

    public abstract static class AppBarStateChangeListener implements AppBarLayout OnOffsetChangedListener public enum State
  • Nginx实战练习

    1 Nginx安装 以centos7为例 详解博文 Nginx安装搭建之源码方式 Centos7 centos7源码安装nginx IT之一小佬的博客 CSDN博客 2 简单搭建站点 2 1 单个站点搭建 正常开放情况下 开发代码防止网站的
  • require() of ES modules is not supported.

    问题 如图所示 看了一些答案是版本问题 解决办法其其实提示已经有了 use import 找到提示的文件 require改为import 问题即可解决
  • 前端如何接接口

    前端一般静态页面写完后 就要从后端获取数据了 就要进行接接口 接接口其实说白了就是发送网络请求 从后端获取数据 然后再将数据渲染到页面上 今天就以一个简单的uniapp项目为例 介绍一下接口怎么写 首先 是封装一个request js文件
  • rockchip rk3368(px5)车载开发之路6,系统开机bootanimation播放视频需求

    本系列记载作者来到一个新的车载后装市场小公司 负责从新开始维护一套代码的心路过程 系统使用瑞芯微的rk3368芯片 版本是PX5 Android 8 0 release 20180726 从无到有的每个patch修改以及思考 其中着重点是驱
  • PyTorch知识点总结100问

    PyTorch知识点总结 什么是PyTorch 它有什么特点和优势 PyTorch中的张量 Tensor 是什么 它与NumPy中的数组有何区别 请介绍一下PyTorch的执行流程 PyTorch中的autograd是什么 它有什么作用 请
  • Salesforce中国区解散,谁是替代的最佳选择?

    摘要 全球第一大CRM厂商退出 对中国市场有何影响 8月3日 Salesforce中国区解散的消息 在IT业界引发热议 虽然是全球第一大CRM厂商 但Salesforce在中国区业务不多 整个团队只有60 70人规模 主要业务是全球500强
  • 分布式系统消息通信技术:MOM与RPC

    一 中间件 什么是中间件 中间件 Middleware 是处于操作系统和应用程序之间的软件 也有人认为它应该属于操作系统中的一部分 人们在使用中间件时 往往是一组中间件集成在一起 构成一个平台 包括开发平台和运行平台 但在这组中间件中必须要
  • ifconfig命令无法识别,提示“Command 'ifconfig' is available in '/sbin/ifconfig'”

    有台虚拟机 用的时候发现ifconfig命令不好用了 提示如下 Command ifconfig is available in sbin ifconfig The command could not be located because
  • 需求:vue用流程图展示数据

    问题描述 如标题所示 粗略的写了一版 没有细化 UI 红框的地方本来想用canvas自己写 但是找资料的时候发现了一个插件LeaderLine 非常符合要求 然后发现了一篇文章vue横向树级组件 流程图 组件递归 套用了一下 然后按照自己的
  • 将json-bigint处理为数值分区数组的字段全部自动转为字符串

    json bigint虽然能帮我们处理好id 但 他的模式 显然不是直接可以用的 我们如果要到业务逻辑单独处理 那就太麻烦了 对系统也非常不友好 我们可以在vue项目中 src目录下创建一个utils 下面创建一个conversionLon
  • 线程共享&&独有

    线程共享 进程代码段 进程的公有数据 利用这些共享数据 线程很容易的实现相互之间的通讯 进程打开的文件描述符 信号的处理器 进程的当前目录和进程用户ID与进程组ID 线程独有 线程ID 桟 错误返回码 error 线程优先级
  • IDEA配置仓库提交简易说明

    1 码云注册并创建仓库 2 IDEA顶部菜单VCS 如果没有 删除代码文件夹里面的 git文件 3 Create git 4 选择需要提交的代码文件夹 5 IDEA顶部菜单Git 6 Commit 提交暂存 选择需要提交的代码文件 选择Co
  • SQLi LABS Less-18

    第十八关请求方式为 GET请求 注入点为 User Agent 注入方式为 错误注入 第一步 判断注入方式 先看源码 后台代码对 特殊字符进行了过滤 常规的注入方式行不通 只有通过代码审计来判断注入方式 登录成功后 有一个保存用户主机信息的
  • 文本三剑客之sed

    sed简介 sed 是Linux中提供的一个外部命令 他是一个行 流 编辑器 非交互式的对文件内容进项增删改查操作 那它和文本编辑器有什么区别呢 区别是 文本编辑器 编辑对象是文件 行编辑器 编辑对象是文件中的行 也就是前者一次处理一个文本