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

[linux]sed命令基础入门详解

sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。

一.基本语法

sed [options] 'commands' files

  • options:可选的命令行选项。
  • commands:要执行的sed命令。
  • files:要处理的文件列表。
1.替换文本:替换第一个匹配项:
sed 's/old/new/' file.txt替换所有匹配项:
sed 's/old/new/g' file.txt2.打印行:打印文件中所有行:
sed -n 'p' file.txt3.删除行:删除包含特定文本的所有行:
sed '/pattern/d' file.txt4.插入文本:在第一行前插入文本:
sed 'i\new line' file.txt5.追加文本:在最后一行后追加文本:
sed 'a\new line' file.txt6.替换特定行:替换第3行:
sed '3s/old/new/' file.txt7.使用模式分隔符:使用其他字符作为分隔符:
sed 's#old#new#' file.txt8.使用正则表达式:使用扩展正则表达式(需要 -r 选项):
sed -r 's/regex/replacement/' file.txt9.原地编辑文件:直接修改文件内容:
sed -i 's/old/new/g' file.txt10.不区分大小写:进行不区分大小写的替换:
sed 's/old/new/I' file.txt11.多行模式:处理多行匹配:
sed ':a;N;$!ba;s/old/new/g' file.txt12.使用循环:对于每找到一个匹配项,执行特定命令:
sed -n '/foo/{ :a p; n; ba; }' file.txt

二.实操案例

首先需要建立一个文档。

1.替换文本

 cat test.txt    #与之后的内容进行对比
"
old-old-new
I love biology
>DJAKNCKALNXLKLHDJKkljkxkxhka
2021-6-27
你好,努力攀登的科学树
"sed 's/old/new/' test.txt    #替换第一个匹配项"
new-old-new
I love biology
>DJAKNCKALNXLKLHDJKkljkxkxhka
2021-6-27
你好,努力攀登的科学树
"sed 's/old/new/g' test.txt    #替换所有匹配项
"
new-new-new
I love biology
>DJAKNCKALNXLKLHDJKkljkxkxhka
2021-6-27
你好,努力攀登的科学树
"

2.打印行

sed -n 'p' test.txt   #打印文件中所有行
"
old-old-new
I love biology
>DJAKNCKALNXLKLHDJKkljkxkxhka
2021-6-27
你好,努力攀登的科学树
"sed -n '2p' test.txt    #打印文件中第二行
"
I love biology
"sed -n '2,4p' test.txt     #打印文件中第二到第四行
"
I love biology
>DJAKNCKALNXLKLHDJKkljkxkxhka
2021-6-27
"

3.删除行

sed '/o/d' test.txt   #删除包含特定文本的所有行
"
>DJAKNCKALNXLKLHDJKkljkxkxhka
2021-6-27
你好,努力攀登的科学树
"

4.插入文本

sed 'i\bew line' test.txt      #在第一行前插入
"
bew line
old-old-new
bew line
I love biology
bew line
>DJAKNCKALNXLKLHDJKkljkxkxhka
bew line
2021-6-27
bew line
你好,努力攀登的科学树
"sed '3i\biology' test.txt       #在第三行前插入
"
old-old-new
I love biology
biology
>DJAKNCKALNXLKLHDJKkljkxkxhka
2021-6-27
你好,努力攀登的科学树
"

5.追加文本

sed 'a\new line' test.txt  #在最后一行追加文本
"
old-old-new
new line
I love biology
new line
>DJAKNCKALNXLKLHDJKkljkxkxhka
new line
2021-6-27
new line
你好,努力攀登的科学树
new line
"

6.替换特定行

sed '2s/love/like/' test.txt   #替换第二行的love,将其改为like
"
old-old-new
I like biology
>DJAKNCKALNXLKLHDJKkljkxkxhka
2021-6-27
你好,努力攀登的科学树
"

以上操作都没有改变原文件。

7.编辑原文件

 sed -i 's/old/new/g' test.txt | cat test.txt
"
new-new-new
I love biology
>DJAKNCKALNXLKLHDJKkljkxkxhka
2021-6-27
你好,努力攀登的科学树
"

相关文章:

[linux]sed命令基础入门详解

sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这…...

Charles抓包工具系列文章(一)-- Compose 拼接http请求

一、背景 众所周知,Charles是一款抓包工具,当然是http协议,不支持tcp。(如果你想要抓tcp包,请转而使用wireshark,在讲述websocket的相关技术有梳理过wireshark抓包) 话说回来,char…...

OLMo:真正完全开源的大模型

最近,又有一家机构AI2(Allen Institute for AI)开源了一个LLM:OLMo,它的英文全称就叫Open Language Model。相比之前开源的大模型,OLMo的独特之处是完全开源,除了训练的模型,OLMo还开…...

51单片机STC89C52RC——12.1 数据存储芯片AT24C02

目的/效果 利用存储芯片AT24C02存储数据,LCD1602显示存储的数据。 一,STC单片机模块 二,AT24C02存储芯片 2.1 介绍 AT24C02是一个2K位串行CMOS E2PROM,内部含有256个8位字节,采用先进CMOS技术实质上减少了器件的功…...

融入云端的心跳:在Spring Cloud应用中集成Eureka Client

融入云端的心跳:在Spring Cloud应用中集成Eureka Client 引言 在微服务架构中,服务发现是一个关键组件,它允许服务实例之间相互发现并通信。Netflix Eureka是Spring Cloud体系中广泛使用的服务发现框架。Eureka提供了一个服务注册中心&…...

CocosCreator构建IOS的wwise教程

CocosCreator构建IOS教程 添加wwise教程: 1.添加include 2.添加SoundEngine 3.添加Profile-iphoneos下面lib下面的.a 4.导入js调用C++的文件 5.导入这些文件 6.初始化ios绝对路径和TTS语音合成对象 6.获得根目录绝对路径,加载pck需要找到绝对路径。怎么找绝对路径? #impor…...

掌握 SQL Server 中的 FLOOR 函数:数据舍入的艺术

掌握 SQL Server 中的 FLOOR 函数:数据舍入的艺术 引言 在数据分析和处理中,我们经常需要对数值进行精确控制,比如将数值舍入到特定的精度。SQL Server 提供了多种数学函数,其中 FLOOR 函数就是用来执行向上舍入操作的强大工具。…...

【折腾笔记】兰空图床使用Redis做缓存

前言 最近发现我部署在群晖NAS上的兰空图床程序在高并发的情况下会导致图片加载缓慢或出现图片加载失败的情况,于是我查阅了官方文档资料并进行了一系列的测试,发现兰空图床如果开启了原图保护功能,会非常的吃CPU的性能,尤其是在…...

【Ubuntu】如何用指令设置静态IP

这里介绍的是利用netplan 的配置文件一般在 /etc/netplan/ 目录下,文件名类似 01-network-manager-all.yaml。 用 nano/ vim 编辑器打开配置文件: sudo nano /etc/netplan/01-network-manager-all.yaml # 替换成你的文件名修改配置文件 network:versi…...

mechanize - 自动化与HTTP web服务器的交互操作

1、前言 随着自动化测试的普及与落地推广,出现了众多知名的自动化测试工具,如Selenium 、Robot Framework、Playwright等。本文将介绍一款在Python环境下的mechanize库,这个库能够模拟浏览器行为,支持发送HTTP请求、解析HTML页面和…...

【Android】保留elevation层级效果,舍弃阴影效果

关于elevation属性 elevation是高度,海拔的意思 该属性可以设置View在父容器中的层级,即z属性 当view的elevation高于其它view时,它将显示在最上方,并产生阴影效果 关闭阴影效果 view的高度阴影,通过outlineProvi…...

Java新手启航:Windows下JDK安装,开启编程之旅

你是不是对编程充满好奇,想要迈入Java的世界,却不知道从何开始?别担心,每一个Java大师都是从安装JDK开始的,而今天,我将手把手教你如何轻松完成JDK的安装,让你迈出编程之旅的第一步! 接下来&am…...

c++指针和引用之高难度(二)习题讲解

1.【单选题】 int a[4] { 1001,1002,1003,1004 }; int* p{ &a[1] }; p[1] ? A 1001 B 1002 C 1003 解析:这道题考察了指针和数组可以混用。p 指向了 数组 a[0] 的地址,也就是 1002 的地址,此时 *p p[0]…...

UNIAPP编译到微信小程序时,会多一层以组件命名的标签

UNIAPP编译到微信小程序时,会多一层以组件命名的标签 解决方案 可以配置virtualHost来配置 export default {options: {virtualHost: true} }...

工业自动化控制中心

目录 一 设计原型 二 后台源码 一 设计原型 二 后台源码 using System; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms;namespace 工业自动化控制中心 {public partial class Form1 : Form{public Form1(){InitializeComponent();}pri…...

【Git】GitIgnore不生效

这里可能有两种原因,一个没有刷新Git缓存,二是Git忽略规则有问题 更新Git缓存 git rm -r --cached . git add . git commit -m "modify git ignore rule"Ignore规则 检查下忽略文件的目录表示是否正确 XXX忽略任意目录下名为XXX的文件 …...

面向对象,常用类,集合,异常,JDBC,mysql数据库内容的复习,

1,面向对象 面向对象与面向过程对比 面向过程:关注过程,适合解决简单直接的问题,代码结构以函数为单位,如C语言。 面向对象:关注类,适合解决复杂问题更加适合解决复杂的项目中的问题等等&…...

HTML5+JavaScript单词游戏

HTML5 JavaScript单词游戏 数据字典格式:每行一个 单词 ,单词和解释用空格分隔,如 a art.一(个);每一(个) ability n.能力;能耐,本领 able a.有能力的;出色的 baby n.婴儿;孩子…...

Windows 中的 Hosts 文件是什么?如何找到并修改它?

什么是 Hosts 文件 Hosts 文件是一个纯文本文件,存在于几乎所有的操作系统中,用于将主机名映射到 IP 地址。在域名系统(DNS)尚未普及之前,Hosts 文件是计算机网络中唯一用于主机名解析的方式。随着网络规模的扩大和 D…...

详细分析Oracle中的tnsnames.ora基本知识 以及 PLSQL如何连接(附Demo)

目录 1. tnsnames.ora2. Demo3. 实战 1. tnsnames.ora Oracle 数据库网络配置文件,用于配置客户端与数据库服务器之间的连接 定义网络服务名称,客户端可以使用这些名称连接到数据库实例 基本的路径如下: Windows: ORACLE_HOME\network\ad…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

rnn判断string中第一次出现a的下标

# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...

基于TurtleBot3在Gazebo地图实现机器人远程控制

1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...

【C++进阶篇】智能指针

C内存管理终极指南:智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...

LOOI机器人的技术实现解析:从手势识别到边缘检测

LOOI机器人作为一款创新的AI硬件产品,通过将智能手机转变为具有情感交互能力的桌面机器人,展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家,我将全面解析LOOI的技术实现架构,特别是其手势识别、物体识别和环境…...

uniapp 小程序 学习(一)

利用Hbuilder 创建项目 运行到内置浏览器看效果 下载微信小程序 安装到Hbuilder 下载地址 :开发者工具默认安装 设置服务端口号 在Hbuilder中设置微信小程序 配置 找到运行设置,将微信开发者工具放入到Hbuilder中, 打开后出现 如下 bug 解…...