当前位置: 首页 > news >正文

linux三剑客之流编辑器sed

sed(stream editor)是Linux和Unix系统中一个非常强大的文本处理工具。它主要用于对文本数据进行过滤和转换。sed 可以在不打开文件的情况下,直接对输入流进行操作,并且可以将结果输出到标准输出或文件。

基本语法:

sed [options] 'script' [input [output]]'
  • [options]:sed 的命令行选项,如 -i 用于直接修改文件。
  • script:定义了要执行的编辑操作的脚本。
  • [input]:输入文件,默认为标准输入(stdin)。
  • [output]:输出文件,默认为标准输出(stdout)。

常用sed命令:

  • sed 's/pattern/replacement/':替换命令,将pattern替换为replacement。
    • g:全局替换,替换行中的所有匹配项。
    • p:打印,只打印匹配的行。
    • n:原样打印,不进行任何替换。
  • sed -n 'pattern':只打印匹配pattern的行。
  • sed -e 'command1' -e 'command2':执行多个命令。
  • sed -i 's/old/new/' file:直接修改文件内容,将old替换为new。
  • sed 'N;N;s/\n//g':合并连续的空行。
  • sed '1,5 s/.*/Hello/':对文件的第1行到第5行执行替换操作。
  • sed '$!N;s/\n//g':除了最后一行外,合并所有行,删除换行符。
  • sed -n '1,5p;1,5!d':打印文件的第1行到第5行,并删除这些行。

正则表达式:

sed 使用基本正则表达式(Basic Regular Expressions, BRE)进行模式匹配。在sed中使用正则表达式时,你需要对特殊字符进行转义。

示例:

  • 将文件input.txt中所有的old替换为new,并将结果保存到output.txt:
sed 's/old/new/' input.txt > output.txt
  • 直接在file.txt文件中替换所有的old为new:
sed -i 's/old/new/' file.txt
  • 打印文件的第1行到第3行:
sed -n '1,3p' file.txt
  • 删除文件中的所有空行:
复制
sed '/^$/d' file.txt

应用场景

sed(stream editor)是一个流编辑器,它在Unix和类Unix系统中广泛应用于各种文本处理任务。以下是一些典型的sed应用场景:

1.文本替换:

sed 's/oldtext/newtext/g' inputfile > outputfile

这个命令会在inputfile中查找所有的oldtext字符串,并将其替换为newtext,结果会被输出到outputfile。

2.文本删除:

sed '/pattern/d' inputfile > outputfile

这个命令会删除inputfile中所有包含pattern的行,并将其余内容输出到outputfile。

3.文本插入:

sed '5i\ New text' inputfile > outputfile

这个命令会在inputfile的第5行之前插入New text,并将结果输出到outputfile。

4.文本追加:

sed '$a\ Additional text' inputfile > outputfile

这个命令会在inputfile的末尾追加Additional text,并将结果输出到outputfile。

5.文本格式化:

sed '=; s/^/    /' inputfile > outputfile

这个命令会将inputfile中的每一行都缩进,并在文件顶部添加行号,结果输出到outputfile。

6.文本过滤:

sed -n '1,5p' inputfile > outputfile

这个命令会从inputfile中提取第1行到第5行的内容,并将这些内容输出到outputfile。

7.日志文件处理:

sed -n '/error/p' inputfile > outputfile

这个命令会从inputfile中提取所有包含error的行,并将这些行输出到outputfile。

8.文本转换:

sed 's/\t/,/g' inputfile > outputfile

这个命令会将inputfile中的所有制表符(\t)替换为逗号(,),并将结果输出到outputfile。

9.文本排序:

sed '1d; s/^/ /' inputfile | sort > outputfile

这个命令会删除inputfile的第一行,然后在每一行前添加空格,之后通过sort命令进行排序,并将结果输出到outputfile。

10.自动化脚本:

sed_script.sh

您可以创建一个shell脚本sed_script.sh,其中包含多个sed命令来自动化文本处理任务。

11.数据提取和报告生成:

sed -n '1,$p' inputfile | awk '{print $1}' > reportfile

这个命令会提取inputfile中每一行的第一个字段,并将这些字段保存到reportfile中,作为报告的一部分。

12.文本加密和解密:

解释# 加密(简单的倒序)
sed '1,$!G;h;$!d;$!N;s/\n//g' inputfile > encryptedfile
# 解密
sed '1,$!G;s/$.*$$.*$/\2 \1/;s/ //g' encryptedfile > decryptedfile

这是一个简单的加密和解密示例,通过倒序文本来实现。

13.批量重命名文件:

sed 's/\.txt$/改名后.txt/' filelist.txt | xargs -I {} mv {} {}

这个命令会从一个包含文件名列表的filelist.txt文件中读取,将所有.txt结尾的文件重命名为改名后.txt。

工作场景

sed(stream editor)在实际工作中有许多应用,尤其在处理文本文件和自动化任务时非常有用。以下是一些实际工作中的应用示例:

1. 日志文件分析

在服务器日志文件中搜索特定的错误信息或过滤出特定用户的活动记录。例如,查找所有404错误:

sed -n '/404/' /var/log/apache2/access.log

2. 配置文件编辑

批量修改配置文件中的参数。例如,更新所有监听端口:

sed -i 's/listen 80/listen 8080/' /etc/httpd/conf/httpd.conf

3. 文本替换

在大型文本文件中替换字符串。例如,将所有的foo替换为bar:

sed 's/foo/bar/g' input.txt > output.txt

4. 数据清洗

删除或格式化数据,如去除文本文件中的空行或注释行:

sed '/^$/d' data.txt  # 删除空行
sed '/^#/d' data.txt  # 删除以#开头的注释行

5. 批量文件重命名

使用sed生成新的文件名列表,然后使用mv命令批量重命名文件:

sed 's/\.txt$/_renamed.txt/' files.txt | xargs -I {} mv {} {}

6. 文本流编辑

在管道操作中使用sed来处理流数据。例如,查找进程列表中CPU使用率超过50%的进程:

ps aux | sed -n '$p; /cpu/ p'

7. 自动生成报告

从日志或其他文本文件中提取信息,生成报告。例如,提取特定服务的访问日志:

sed -n '/myservice/' /var/log/messages > myservice.log

8. 临时更改配置

在不修改原始文件的情况下,临时更改配置文件的参数,例如,临时增加日志级别:

sed 's/LogLevelWarn/LogLevelInfo/' /etc/myapp/myapp.conf > temp.conf && source temp.conf

9. 密码隐藏

在脚本中隐藏敏感信息,如密码:

sed 's/password: .*/password: ***/' /etc/passwd

10. 条件执行命令

根据匹配到的文本执行特定的命令。例如,如果文件中包含某个关键词,则执行备份操作:

复制
sed -n '/critical issue/{=; /$/q;} p' /var/log/syslog | xargs -I {} tar -czf {}_backup.tar.gz /path/to/data

相关文章:

linux三剑客之流编辑器sed

sed(stream editor)是Linux和Unix系统中一个非常强大的文本处理工具。它主要用于对文本数据进行过滤和转换。sed 可以在不打开文件的情况下,直接对输入流进行操作,并且可以将结果输出到标准输出或文件。 基本语法: s…...

【Android Studio】上位机-安卓系统手机-蓝牙调试助手

【Android Studio】上位机-安卓系统手机-蓝牙调试助手 文章目录 前言AS官网一、手机配置二、移植工程三、配置四、BUG五、Java语言总结 前言 提示:以下是本篇文章正文内容,下面案例可供参考 AS官网 AS官网 一、手机配置 Android Studio 下真机调试 …...

怎样把学浪购买的课程下载下来

如何把学浪已购买的课程下载下来?这里就教大家一个方法,利用一个工具轻轻松松把视频下载下来 这个工具我打包成压缩包了,有需要的自己取一下 链接:https://pan.baidu.com/s/1y7vcqILToULrYApxfEzj_Q?pwdkqvj 提取码:kqvj --来自百度网盘超级会员V1…...

SD-WAN如何解决更有性价比地跨境网络问题

云桥通SD-WAN利用智能路由和负载均衡技术,优化数据传输路径,提高网络性能和可靠性。这意味着数据在跨国传输时可以更快到达目的地,减少延迟和丢包率。跨境SD-WAN提高了网络连接速度和质量,使用户能够更快地访问跨国业务所需的资源…...

第15章 File类与IO流

一 java.io.File类的使用 1.1 概述 File类及本章下的各种流,都定义在java.io包下。一个File对象代表硬盘或网络中可能存在的一个文件或者文件目录(俗称文件夹),与平台无关。(体会万事万物皆对象)File 能新…...

C语言基础语法-教案16(从小白到劝退之结构体初阶)

最近给大家争取到一个 深夜福利 保证你在深夜手机刷到 嘎嘎香~ 那就是 大流量卡 缺点:月租太便宜 185GB~ 100分钟通话时长~ 长期套餐~ 畅想自由的气息 流量自由的同时还拥有超长通话,而且免费领取。 名额有限,咱们废话不多说直接上…...

Linux:ip和ip协议的初步认识

文章目录 ip协议基本认识ip协议的报头网段划分ip的类型划分 ip协议基本认识 前面对于TCP的内容已经基本结束了,那么这也就意味着在传输层也已经结束了,那么下一步要进入的是的是网络层,网络层中也有很多种协议,这里主要进行解析的…...

Android12 简单的共享内存驱动实现 参考Ashmem

Android12 共享内存驱动实现 SOC:RK3568 system:Android12 概述: 1. 概述 Ashmem(Anonymous Shared Memory,Android 匿名共享内存),它基于 mmap 系统调用,可以让不同进程将同一段…...

物理安全和逻辑安全在信息安全中的重要作用

在信息时代,信息安全已经成为企业和个人不可或缺的重要组成部分。物理安全和逻辑安全作为信息安全的两大支柱,发挥着至关重要的作用。 什么是物理安全和逻辑安全? 物理安全是指通过技术手段,对计算机设备、网络设备、数据中心等…...

每日一题 --- 滑动窗口最大值[力扣][Go]

滑动窗口最大值 题目:239. 滑动窗口最大值 给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的最大值 。 示例 1&#xff1…...

TensorBoard可视化+Confustion Matrix Drawing

for later~ 代码阅读 1. 加载trainset import argparse import logging import os import numpy as npimport torch from torch import distributed from torch.utils.data import DataLoader from torch.utils.tensorboard import SummaryWriterfrom backbones import get_…...

012——LED模块驱动开发(基于I.MX6uLL)

目录 一、 硬件原理图 二、 驱动程序 三、 应用程序 四、 Makefile 五、操作 一、 硬件原理图 又是非常经典的点灯环节 ,每次学新语言第一步都是hello world,拿到新板子或者学习新的操作系统,第一步就是点灯。 LED 的驱动方式&#xff0…...

基于springboot实现房屋租赁管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现房屋租赁系统演示 摘要 房屋是人类生活栖息的重要场所,随着城市中的流动人口的增多,人们对房屋租赁需求越来越高,为满足用户查询房屋、预约看房、房屋租赁的需求,特开发了本基于Spring Boot的房屋租赁系统。 …...

168.乐理基础-中古调式概述

如果到这五线谱还没记住还不认识的话去看102.五线谱-高音谱号与103.五线谱-低音谱号这两个里,这里面有五线谱对应的音名,对比着看 如果不认识调号去看112.五线谱的调号(一)、113.五线谱的调号(二)、114.快…...

【项目实战】【Docker】【Git】【Linux】部署V2rayA项目

今天着手了一个全新领域的项目,从完全没有头绪到成功运行,记录一下具体的部署流程 github项目链接V2rayA 一开始拿到以后完全没有抓手,去阅读了一下他的帮助文档 写着能用docker运行,就去下载了一个Docker配置了一下 拉取代码到…...

mac 切换 jdk

查看 mac 上都有哪些版本 /usr/libexec/java_home -V看准版本切换 按前缀切换 比如 export JAVA_HOME/usr/libexec/java_home -v 1.8这样会随机一个 1.8 的 如果想再确定一个比如 openjdk export JAVA_HOME/usr/libexec/java_home -v 1.8.0_292这个方式是临时的&#xff0c…...

MD5加密返回32位密文字符串

前言: 项目中需要调用其他系统的 api 接口,接口使用的是按一定规则生成 MD5 密文作为签名来进行身份验证,本文仅记录 32 位 MD5 密文的生成方式,仅供参考。 什么是MD5 加密? MD5 加密是一种加密算法,MD5…...

npm常用命令技巧

NPM (Node Package Manager) 是 JavaScript 的包管理工具,广泛用于管理项目中的依赖。无论是前端项目还是Node.js后端项目,NPM 都扮演着重要的角色。本文将介绍 NPM 中常用的几个命令,并提供相应的代码示例。 1. 初始化项目:npm …...

intellij idea 使用git撤销(取消)commit

git撤销(取消) 未 push的 commit Git,选择分支后,右键 Undo Commit ,会把这个 commit 撤销。 git撤销(取消) 已经 push 的 commit 备份分支内容: 选中分支, 新建 分支,避免后续因为操作不当,导…...

【计算机网络】四层负载均衡和七层负载均衡

前言 1、分层方式 首先我们知道,在计算机网络中,常用的协议分层方式:OSI和TCP/IP,以及实际生产中使用的协议划分方式。 在OSI中,各层的职责如下: 应用层:对软件提供接口以使程序能使用网络服…...

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...

Razor编程中@Html的方法使用大全

文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...

基于Java+VUE+MariaDB实现(Web)仿小米商城

仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意:运行前…...

DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态

前言 在人工智能技术飞速发展的今天,深度学习与大模型技术已成为推动行业变革的核心驱动力,而高效、灵活的开发工具与编程语言则为技术创新提供了重要支撑。本书以两大前沿技术领域为核心,系统性地呈现了两部深度技术著作的精华:…...

ubuntu系统文件误删(/lib/x86_64-linux-gnu/libc.so.6)修复方案 [成功解决]

报错信息:libc.so.6: cannot open shared object file: No such file or directory: #ls, ln, sudo...命令都不能用 error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory重启后报错信息&…...

快速排序算法改进:随机快排-荷兰国旗划分详解

随机快速排序-荷兰国旗划分算法详解 一、基础知识回顾1.1 快速排序简介1.2 荷兰国旗问题 二、随机快排 - 荷兰国旗划分原理2.1 随机化枢轴选择2.2 荷兰国旗划分过程2.3 结合随机快排与荷兰国旗划分 三、代码实现3.1 Python实现3.2 Java实现3.3 C实现 四、性能分析4.1 时间复杂度…...

ZYNQ学习记录FPGA(二)Verilog语言

一、Verilog简介 1.1 HDL(Hardware Description language) 在解释HDL之前,先来了解一下数字系统设计的流程:逻辑设计 -> 电路实现 -> 系统验证。 逻辑设计又称前端,在这个过程中就需要用到HDL,正文…...

6.计算机网络核心知识点精要手册

计算机网络核心知识点精要手册 1.协议基础篇 网络协议三要素 语法:数据与控制信息的结构或格式,如同语言中的语法规则语义:控制信息的具体含义和响应方式,规定通信双方"说什么"同步:事件执行的顺序与时序…...