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࿱…...
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 的驱动方式࿰…...

基于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这个方式是临时的,…...
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中,各层的职责如下: 应用层:对软件提供接口以使程序能使用网络服…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...

cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...

2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

(转)什么是DockerCompose?它有什么作用?
一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...

Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...