sed 原地替换文件时遇到的趣事

news2024/11/27 8:42:03

哈喽大家好,我是咸鱼

在文章《三剑客之 sed》中咸鱼向大家介绍了文本三剑客中的 sed

sed 全名叫 stream editor,流编辑器,用程序的方式来编辑文本

那么今天咸鱼打算讲一下我在用 sed 原地替换文件时遇到的趣事

sed 让文件属性变了?

有这么一个普通文件 test.txt ,内容如下:

[root@localhost /opt]# cat test.txt 
My name is Ammon
hello world!
hahahahaha

link_test.txt 是一个软链接(Symbolic Link,也可以叫符号链接)文件,指向 test.txt 文件
在这里插入图片描述
软链接文件类似于 Windows 的快捷方式,它实际上是一个特殊的文件。关于软链接相关的内容这里不过多介绍

如果我们对软链接文件内容进行修改,源文件是会跟着改变的
在这里插入图片描述
当我使用 sed 对软链接文件link_test.txt 进行内容修改时,命令如下

[root@localhost /opt]# sed -i 's/Ammon/Edsion/g' link_test.txt 

有趣的现象发生了:使用 sed 对软链接文件link_test.txt 进行内容修改之后,源文件test.txt内容没有变化,软链接文件link_test.txt 的内容发生变化且变成了普通文件

在这里插入图片描述
怎么样,是不是很神奇?sed 不但把文件内容改了,还把文件属性也给改了

我们用 strace 工具来查看一下在执行 sed 命令时操作系统做了哪些操作

strace 一个系统调用跟踪工具,它会跟踪并记录命令运行期间的系统调用和信号

[root@localhost /opt]# strace sed -i 's/Ammon/Edsion/g' link_test.txt > strace.log 2>&1

具体内容有点多,我们着重看下关键内容
在这里插入图片描述
由上图可以知道,如果我们使用 sed 对一个文件进行原地替换,需要有一个临时文件,sed 先把修改内容写入到这个文件,最后将文件 rename 到原来的地方

那我的需求是对软链接文件 link_test.txt 进行内容修改,软链接文件属性不变,且源文件的内容也跟着改变,有没有什么方法呢?

也就是说我们希望命令在执行的时候能够解析出来软链接文件后面指向的源文件,直接对源文件进行读–处理–写,最后 rename

sed 命令有一个选项 --follow-symlinks

--follow-symlinks: 
	follow symlinks when processing in place

我们在执行的时候加上这个选项:

[root@localhost /opt]# strace sed -i --follow-symlinks 's/Ammon/Edsion/g' link_test.txt > strace.log 2>&1

在这里插入图片描述
总结一下:

  • sed 替换的底层逻辑是把更新后的内容写入一个临时文件里面,然后再 rename 这个临时文件
  • 这样就会使得如果没有添加 –follow-symlinks 选项的话,对软链接文件进行 sed 操作就会使得软链文件变成了一个常规文件(其实是那个临时文件重命名导致的)
  • 如果要对软链接文件指向的源文件进行操作,就需要添加 –follow-symlinks 选项

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

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

相关文章

故障诊断模型 | Maltab实现BP神经网络的故障诊断

文章目录 效果一览文章概述模型描述源码设计参考资料效果一览 文章概述 故障诊断模型 | Maltab实现BP神经网络的故障诊断 模型描述 BP(Back Propagation) 算法是神经网络深度学习中最重要的算法之一,了解BP算法可以让我们更理解神经网络深度学习模型训练的本质,属于内功修行的…

什么叫储能能量管理单元EMU?储能能量管理单元EMU功能?储能EMU是什么?储能能量管理系统如何实现一次调频AGC-AVC功能?

一:储能EMU是什么意思?什么叫储能能量管理单元EMU? EMU是能量管理单元的英文缩写 (Energy Management Unit, EMU) EmuPower3300能量管理单元EMU是由广州智昊电气研发配套EsccPower3300储能协调管理器组成对光伏电站的管理,控制,…

Java随机获取某个范围内的随机整数

随机获取某个范围内的随机整数 一、代码 /*** 随机获取某个范围内的随机整数的值* param min 最小值* param max 最大值* return*/public static int randomNum(int min,int max) {// 创建一个Random对象Random random new Random();// 生成指定范围内的随机整数int randomI…

【Linux】 passwd命令使用

passwd命令用来更改使用者的密码。 语法 passwd [选项] [用户名] passwd命令 -Linux手册页 著者 克里斯蒂安加夫顿<gaftonredhat.com> 命令选项及作用 执行令 passwd --help 执行命令结果 参数 -k, --keep-tokens 保持身份验证令牌不过期-d, --delete …

超详细docker学习笔记

关于docker 一、基本概念什么是docker?docker组件&#xff1a;我们能用docker做什么Docker与配置管理&#xff1a;Docker的技术组件Docker资源Docker与虚拟机对比 二、安装docker三、镜像命令启动命令帮助命令列出本地主机上的镜像在远程仓库中搜索镜像查看占据的空间删除镜像…

Lustre文件系统介绍

一、什么是Lustre文件系统 Lustre架构是用于集群的存储架构。Lustre架构的核心组件是Lustre文件系统&#xff0c;它在Linux操作系统上得到支持&#xff0c;并提供了一个符合POSIX *标准的UNIX文件系统接口。 Lustre存储架构用于许多不同类型的集群。它以支持世界上许多最大的…

【Java】智慧校园云SaaS平台源码带微信小程序

智慧校园以互联网为基础&#xff0c;以“大数据云服务”为核心&#xff0c;融合校园教学、管理、生活软硬件平台&#xff0c;定义智慧校园新生活。智慧校园管理平台管理者、教师、学生、家长提供一站式智慧校园解决方案&#xff0c;实现校园管理智能化、校园生活一体化、校园设…

在二维矩阵/数组中查找元素 Leetcode74, Leetcode240

这一类题型中二维数组的元素取值有序变化&#xff0c;因此可以用二分查找法。我们一起来看一下。 一、Leetcode 74 Leetcode 74. 搜索二维矩阵 这道题要在一个二维矩阵中查找元素。该二维矩阵有如下特点&#xff1a; 每行元素 从左到右 按非递减顺序排列。每行的第一个元素 …

大数据技能竞赛(需要提供相关答疑私信)

全国职业院校技能大赛模拟题 &#xff08;平台搭建&#xff0c;离线数据清洗&#xff0c;实时数据分析&#xff0c;可视化&#xff0c;综合分析&#xff09; 大数据平台搭建 大数据技术与应用技能竞赛题目解析及代码分析实验 Hadoop完全分布式安装配置/伪分布式安装配置 Spark、…

SAP IDOC 开发入门

1, 基本概念 IDOC技术在早起版本的R/3系统就已经集成了&#xff0c;不过国内真正用起来还是05年以后了&#xff0c;其实IDOC是很强大的&#xff0c;在主数据和一些业务数据同步方面&#xff0c;几乎不需要做任何开发就可以配置完成&#xff0c;例如BD11&#xff0c;BD13这些事…

[滑动窗口] (一) LeetCode 209. 长度最小的子数组 和 LCR 016.无重复字符的最长子串

[滑动窗口] (一) LeetCode 209. 长度最小的子数组 和 LCR 016.无重复字符的最长子串 文章目录 [滑动窗口] (一) LeetCode 209. 长度最小的子数组 和 LCR 016.无重复字符的最长子串什么是滑动窗口长度最小的子数组题目解析解题思路代码实现总结 无重复字符的最长子串题目解析解题…

氮化镓功率放大器长期记忆效应的补偿

标题&#xff1a;Compensation of Long-Term Memory Effects on GaN HEMT-Based Power Amplifiers 来源&#xff1a;IEEE TRANSACTIONS ON MICROWAVE THEORY AND TECHNIQUES DPD&#xff1a;数字预失真&#xff08;Digital Pre-Distortion&#xff09;RF PA&#xff1a;射频功…

UI设计感专业商业代理服务公司宣传前端网站模板源码

专业商业代理服务公司宣传网站模板是一款适合提供商情分析、报告分析、IT咨询、管理、策略计划等商业代理服务公司宣传网站模板下载。提示&#xff1a;本模板调用到谷歌字体库&#xff0c;可能会出现页面打开比较缓慢。 演示下载 qnziyw点cn/wysc/qdmb/21764点html

CoDeSys系列-4、基于Ubuntu的codesys运行时扩展包搭建Profinet主从环境

CoDeSys系列-4、基于Ubuntu的codesys运行时扩展包搭建Profinet主从环境 文章目录 CoDeSys系列-4、基于Ubuntu的codesys运行时扩展包搭建Profinet主从环境一、前言二、资料收集三、Ubuntu18.04从安装到更换实时内核1、下载安装Ubuntu18.042、下载安装实时内核&#xff0c;解决编…

【Linux】 man命令使用

介绍 man命令是Linux下最核心的命令之一。而man命令也并不是英文单词“man”的意思&#xff0c;它是单词manual的缩写&#xff0c;即使用手册的意思。 man命令会列出一份完整的说明。 其内容包括命令语法、各选项的意义及相关命令 。更为强大的是&#xff0c;不仅可以查看Lin…

Redis创始人开源最小聊天服务器,仅200行代码,几天功夫已获2.8K Star!

中午时候&#xff0c;在技术交流群里聊起关于Redis创始人的一些趣事&#xff0c;比如离开Redis之后&#xff0c;去写科幻小说之类的。 因为好奇科幻小说&#xff0c;TJ君就去搜索了一下。结果一搜&#xff0c;发现Redis作者最近居然又搞了个新活儿&#xff01; 世界上最小的聊…

网安新旅程

网安新旅程 将近四个月没发博客了&#xff0c;今天交代一下最近发生的事情和规划。 TryHackMyOffsecBox QQ交流 君羊&#xff1a;751273347 近期的事情 6月开始我进入htb学院学习CPTS&#xff0c;7月左右我完成了95%左右的内容。7-8月份我基本都在做C#相关的开发&#xff0c…

Linux ----------------------- 文本处理工具

&#xff08;一&#xff09;绪论 awk、grep、sed和cut 是Linux 操作文本的四大利器&#xff0c;合称文本四大金刚&#xff0c;也是必须掌握的Linux 命令之一。这四个工具的功能各有侧重&#xff1a; awk&#xff1a;功能最强大&#xff0c;用于处理和格式化文本&#xff0c;可…

uniapp原生插件之安卓热敏打印机打印插件

插件介绍 安卓热敏打印机打印插件&#xff0c;自动授权&#xff0c;打印机连接监听&#xff0c;打印文本&#xff0c;条形码&#xff0c;二维码&#xff0c;切纸&#xff0c;打印机状态&#xff0c;打印结果查询等 插件地址 安卓热敏打印机打印插件 - DCloud 插件市场 超级…

信号完整性分析基础知识之有损传输线、上升时间衰减和材料特性(九):互连的带宽

如果我们从理想方波的频谱开始&#xff0c;优先衰减高频分量而不是低频分量&#xff0c;则传输信号的带宽&#xff08;重要的最高正弦波频率&#xff09;将会减小。我们让波传播的时间越长&#xff0c;高频分量的衰减就越大&#xff0c;带宽就越低。 带宽作为重要的最高正弦波频…