sed 流编辑器
一、简介
非交互式的处理 一行一行的读入处理 占用系统空间少 大文件一般用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 流编辑器的更多相关文章
- Linux三剑客之sed流编辑器
一.功能说明 Sed是Stream Editor(流编辑器)缩写,是操作.过滤和转换文本内容的强大工具.常用功能有增删改查,过滤,取行. 二.语法格式 Usage: sed [options] [se ...
- 【Shell案例】【!~//、grep反向查找、sed流编辑器】13、去掉所有包含this的句子
描述写一个 bash脚本以实现一个需求,去掉输入中含有this的语句,把不含this的语句输出示例:假设输入如下:that is your bagis this your bag?to the deg ...
- Linux下的sed流编辑器命令详解
sed是stream editor的简称,也就是流编辑器.它一次处理一行内容,处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内 ...
- Linux sed 流编辑器
sed是stream editor的简称,也就是流编辑器.盗用一张图片解释原理 命令格式: SYNPPSIS: sed [OPTION]… {script-only-if-no-other-scrip ...
- sed流编辑器
一.前言 (一).sed 工作流程 sed 是一种在线的.非交互式的流编辑器,它一次处理一行内容.处理时,把当做前处理的行存储在临时缓存区中,成为“模式空间”(pattern space),接着用se ...
- Shell:sed流编辑器
转载:http://blog.sina.com.cn/s/blog_ac9fdc0b0101lvdv.html sed和awk是永远地痛,学了又忘,主要是木有横向对比过,所以总把握不到精髓.它可以完美 ...
- SED单行脚本快速参考(Unix 流编辑器)(转)
sed.sourceforge.net被封杀,特在此处贴上官方的sed 使用说明文档 SED单行脚本快速参考(Unix 流编辑器) 2005年12月29日 英文标题:USEFUL ONE-LINE S ...
- SED单行脚本快速参考(Unix 流编辑器)
------------------------------------------------------------------------- SED单行脚本快速参考(Unix 流编辑器) 200 ...
- Shell 基础 -- 流编辑器 sed 详解
一.流编辑器 sed 与命令 sed Linux 中,常使用流编辑器 sed 进行文本替换工作.与常使用的交互式编辑器(如vim)不同,sed 编辑器以批处理的方式来编辑文件,这比交互式编辑器快得多, ...
- sed:轻量级流编辑器
一. sed命令 sed是一种几乎包括在所有UNIX平台(包括Linux)的轻量级流编辑器.sed主要是用来将数据进行选取.替换.删除.新增的命令 注意:vi命令只能修改文件,但不能修改命令的结果,如 ...
随机推荐
- 飞码LowCode前端技术系列:如何便捷快速验证实现投产及飞码探索
本篇文章从数据中心,事件中心如何协议工作.不依赖环境对vue2.x.vue3.x都可以支持.投产页面问题定位三个方面进行分析. 一.数据中心,事件中心设计 飞码是数据驱动+事件驱动的产品,考虑到飞码运 ...
- 快速入门:构建您的第一个 .NET Aspire 应用程序
前言 云原生应用程序通常需要连接到各种服务,例如数据库.存储和缓存解决方案.消息传递提供商或其他 Web 服务..NET Aspire 旨在简化这些类型服务之间的连接和配置.在本快速入门中,您将了解如 ...
- pnpm 管理依赖包是如何节省磁盘空间的?
npm 存在的问题 我们经常使用 npm 来管理 node 项目中的包,从 package.json 中读取配置将依赖下载到本地,以保障项目的正常运行. 当项目数量多时,这样的包管理方式会非常的占用电 ...
- SpringBoot + 通义千问 + 自定义React组件,支持EventStream数据解析!
一.前言 大家好!我是sum墨,一个一线的底层码农,平时喜欢研究和思考一些技术相关的问题并整理成文,限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教. 最近ChatGPT非常受欢迎,尤其是在编 ...
- 3C智能移动周边产品龙头企业如何集成企业内部所有异构系统数据
全面并自动集成品胜集团全域业务系统中的各类业务数据:结构化.标准化.自动化集团全部异构系统数据,提升全公司整体项目管理水平:梳理与简化跨部门.跨系统流程,清晰定义流程节点及业务边界,打通部门间信息流通 ...
- 【Android】打卡app 今日完成情况记录
已完成内容:页面的设计.数据库的建立 今日目标:实现数据库的增删改查,并能够在页面实现输出 逻辑: 1.用户进入注册页面,进行注册,注册成功后,可以成功登录(这一阶段就完成了) 2.登录后,显示用户的 ...
- 练习感受以及经验总结(ing)
connection = DriverManager.getConnection(url, user,password );顺序一定不能搞错,当时顺序写错了.查bug查了一晚上.得益于两个函数都用到了 ...
- Go语言函数详解
函数 (1)函数的定义 函数使用func进行定义 函数是基本的代码块,用于执行一个任务 Go语言至少有一个main函数 函数声明告诉了编译器函数的名称,返回类型和参数 //1.无参数无返回值函数的定义 ...
- Python 潮流周刊第 30 期(摘要)
本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...
- [ABC246B] Get Closer
section> Problem Statement From the point $(0,0)$ in a two-dimensional plane, let us move the dis ...