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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/792201.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C# Task任务详细讲解

Task基础讲解 在C#中,Task 是用于表示异步操作的类。它属于 System.Threading.Tasks 命名空间,并允许你以异步方式执行代码,从而不阻塞主线程。这对于I/O密集型操作(如网络请求或文件读写)或CPU密集型任务非常有用&am…

微信小程序——小程序和页面生命周期详解

小程序的生命周期 小程序的生命周期主要分为以下几个阶段: 创建(onLoad): 当小程序启动时,或者从其他页面跳转到当前页面时,会触发 onLoad 生命周期函数。 这个阶段通常用于初始化页面数据,从服…

解锁动态规划:从斐波那契到高效算法

动态规划(Dynamic Programming, DP)是解决优化问题的一种算法策略,它将一个复杂问题分解为更小的子问题,通过解决子问题来逐步找到复杂问题的最优解。动态规划适用于有重叠子问题和最优子结构性质的问题。接下来,我们通…

windows下使用wget批量下载银河麒麟软件仓库中的软件包——Wget for windows

1.什么是wget? wget是一个强力方便的命令行下的下载工具,可以通过HTTP和FTP协议(两种最广泛的互联网协议)从因特网中检索并获取文件。 此外,wget还具有如下特点: 以非交互方式工作,因而能够在用户注销后在后台进行工作(针对Linux command)。在缓慢甚至不稳定的连接中依…

基于SSM的药店药品商城管理系统

介绍 本项目分为前后台,分为管理员与普通用户两种角色,管理员登录后台,普通用户登录前台; 管理员角色包含以下功能: 管理员登录,订单管理,客户管理,药品管理,类目管理等功能。用户角色包含以下功能: 用户首…

pycharm打包python文件为exe文件(图文教程)

1.安装pyinstaller库 pip3 install pyinstaller 2.使用pyinstaller 打包文件 首先确保Terminal命令行中,你的路径和你的项目是同一个路径 我的项目就是放在golden_dev中的。 3.命令行内输入打包代码 pyinstaller -F -w gold_miner.py gold_miner.py 是我的项目…

【linux】Ubuntu 查询CPU、GPU、硬盘、内存等硬件信息

环境 硬件:通用PC /Jetson Xavier NX 套件 系统:Ubuntu 20.04 软件 : 获取CPU信息 在Ubuntu系统中,可以通过在终端执行以下命令来获取CPU的名称: lscpu如果需要精准查找CPU名称 、核心数、厂商可以使用 查看CPU名…

前视声呐目标识别定位(二)-目标识别定位模块

前视声呐目标识别定位(一)-基础知识 前视声呐目标识别定位(二)-目标识别定位模块 前视声呐目标识别定位(三)-部署至机器人 前视声呐目标识别定位(四)-代码解析之启动识别模块 …

[xboard]real6410-6.1 移植rootfs之busybox

文章目录 busybox下载 https://busybox.net/downloads/ [图片] wget https://busybox.net/downloads/busybox-x.yy.z.tar.bz2 tar xvf busybox-x.yy.z.tar.bz2 busybox配置编译 busybox-1.35.0$ export CROSS_COMPILE=/home/gjw/2024/compile/arm-2014.05/bin/arm-none-linux-g…

【ZZULIOJ】1033: 五级制成绩(Java)

目录 题目描述 输入 输出 样例输入 Copy 样例输出 Copy code 题目描述 给定一个百分制成绩, 请根据百分制成绩输出其对应的等级。转换关系如下: 90分及以上为’A’,80~89为’B’, 70~79为’C’, 60~69为’D’,6…

高斯消元详解

算法概述 高斯消元法是一个用来求解线性方程组的算法 那么什么是线性方程组呢? 线性:每个未知数次数都为1次方程组:多个方程,多个未知数。 (a1x1a2x2..anxnbn)x为一次的 当x是平方的时候就不是线性 简而言之就是有多个未知数&#xff…

0基础学习Mybatis系列数据库操作框架——多环境配置

大纲 配置代码参考资料 在实际开发中,我们往往会将开发环境分成:开发、测试、线上等环境。这些环境的数据源不一样,比如开发环境就不能访问线上环境,否则极容易出现线上数据污染等问题。Mybatis通过多环境配置分开定义来解决这个问…

Shell脚本之基本语法

目录 一、变量定义 变量命名规则: 变量的赋值: 只读变量: 删除变量: 二、变量的类型 自定义变量: 环境变量: 位置参数: 预定义变量: 三、键盘输入 四、数值运算 为什么…

数据结构—堆

什么是堆 堆是一种特殊的树形结构,其中每个节点都有一个值。堆可以分为两种类型:最大堆和最小堆。在最大堆中,每个节点的值都大于等于其子节点的值;而在最小堆中,每个节点的值都小于等于其子节点的值。这种特性使得堆…

RPA自动化小红书自动化写文以及发文!

1、视频演示 RPA自动化小红书自动写作发文 2、核心功能点 采集笔记:采集小红书上点赞量大于1000的爆款笔记 下载素材:下载爆款笔记的主图 爆款改写:根据爆款笔记的标题仿写新的标题以及新的文案 自动发布:将爆款笔记发布到小红…

希尔排序算法(Java实现)

1.希尔排序(Shell Sort) (1)算法思想 先追求表中元素部分有序,再逐渐逼近全局有序。先将待排序表分割成若干形如 L [ i , i d , i 2 d , . . . , i k d ] L[i,id,i2d,...,ikd] L[i,id,i2d,...,ikd]的子表&#xff…

【docker】基础背景 Windows安装docker(WSL2)

docker解释 docker作用: 使用具体例子解释,在没有docker之前,整体项目由程序员在本地编写完成之后,再把执行文件丢给运维人员。但是有问题:因为运维同学的具体环境与编码人员的环境可能不一致,所以可能在环…

Three.js——scene场景、几何体位置旋转缩放、正射投影相机、透视投影相机

个人简介 👀个人主页: 前端杂货铺 🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展 📃个人状态: 研发工程师,现效力于中国工业软件事业 🚀人生格言: 积跬步…

第N6周:使用Word2vec实现文本分类

import torch import torch.nn as nn import torchvision from torchvision import transforms,datasets import os,PIL,pathlib,warnings #忽略警告信息 warnings.filterwarnings("ignore") # win10系统 device torch.device("cuda"if torch.cuda.is_ava…

DD3L内存芯片介绍

在数字科技迅猛发展的今天,内存芯片作为硬件的核心组件之一,扮演着至关重要的角色。而DD3L内存芯片以其卓越的性能和独特的设计,成为众多高端电子设备的不二选择。那么,DD3L内存芯片究竟如何应用,又是如何释放数字世界…