当前位置:首页 > 科技  > 软件

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

来源: 责编: 时间:2023-11-04 23:04:48 486观看
导读哈喽大家好,我是咸鱼在文章《三剑客之 sed》中咸鱼向大家介绍了文本三剑客中的 sedsed 全名叫 stream editor,流编辑器,用程序的方式来编辑文本那么今天咸鱼打算讲一下我在用 sed 原地替换文件时遇到的趣事sed 让文件属

哈喽大家好,我是咸鱼aDp28资讯网——每日最新资讯28at.com

aDp28资讯网——每日最新资讯28at.com

在文章《三剑客之 sed》中咸鱼向大家介绍了文本三剑客中的 sedaDp28资讯网——每日最新资讯28at.com

aDp28资讯网——每日最新资讯28at.com

sed 全名叫 stream editor,流编辑器,用程序的方式来编辑文本aDp28资讯网——每日最新资讯28at.com

aDp28资讯网——每日最新资讯28at.com

那么今天咸鱼打算讲一下我在用 sed 原地替换文件时遇到的趣事aDp28资讯网——每日最新资讯28at.com

aDp28资讯网——每日最新资讯28at.com

aDp28资讯网——每日最新资讯28at.com

sed 让文件属性变了?

aDp28资讯网——每日最新资讯28at.com

有这么一个普通文件 test.txt ,内容如下:aDp28资讯网——每日最新资讯28at.com

图片图片aDp28资讯网——每日最新资讯28at.com

aDp28资讯网——每日最新资讯28at.com

link_test.txt 是一个软链接(Symbolic Link,也可以叫符号链接)文件,指向 test.txt 文件aDp28资讯网——每日最新资讯28at.com

图片图片aDp28资讯网——每日最新资讯28at.com

aDp28资讯网——每日最新资讯28at.com

软链接文件类似于 Windows 的快捷方式,它实际上是一个特殊的文件。关于软链接相关的内容这里不过多介绍aDp28资讯网——每日最新资讯28at.com

aDp28资讯网——每日最新资讯28at.com

如果我们对软链接文件内容进行修改,源文件是会跟着改变的aDp28资讯网——每日最新资讯28at.com

图片图片aDp28资讯网——每日最新资讯28at.com

aDp28资讯网——每日最新资讯28at.com

当我使用 sed 对软链接文件 link_test.txt 进行内容修改时,命令如下aDp28资讯网——每日最新资讯28at.com

图片图片aDp28资讯网——每日最新资讯28at.com

aDp28资讯网——每日最新资讯28at.com

有趣的现象发生了:使用 sed 对软链接文件 link_test.txt 进行内容修改之后,源文件 test.txt 内容没有变化,软链接文件link_test.txt 的内容发生变化且变成了普通文件aDp28资讯网——每日最新资讯28at.com

图片图片aDp28资讯网——每日最新资讯28at.com

aDp28资讯网——每日最新资讯28at.com

怎么样,是不是很神奇?sed 不但把文件内容改了,还把文件属性也给改了aDp28资讯网——每日最新资讯28at.com

aDp28资讯网——每日最新资讯28at.com

我们用 strace 工具来查看一下在执行 sed 命令时操作系统做了哪些操作aDp28资讯网——每日最新资讯28at.com

aDp28资讯网——每日最新资讯28at.com

aDp28资讯网——每日最新资讯28at.com

strace 一个系统调用跟踪工具,它会跟踪并记录命令运行期间的系统调用和信号aDp28资讯网——每日最新资讯28at.com

aDp28资讯网——每日最新资讯28at.com

aDp28资讯网——每日最新资讯28at.com

图片图片aDp28资讯网——每日最新资讯28at.com

aDp28资讯网——每日最新资讯28at.com

具体内容有点多,我们着重看下关键内容aDp28资讯网——每日最新资讯28at.com

图片图片aDp28资讯网——每日最新资讯28at.com

aDp28资讯网——每日最新资讯28at.com

由上图可以知道,如果我们使用 sed 对一个文件进行原地替换,需要有一个临时文件,sed 先把修改内容写入到这个文件,最后将文件 rename 到原来的地方aDp28资讯网——每日最新资讯28at.com

aDp28资讯网——每日最新资讯28at.com

那我的需求是对软链接文件 link_test.txt 进行内容修改,软链接文件属性不变,且源文件的内容也跟着改变,有没有什么方法呢?aDp28资讯网——每日最新资讯28at.com

aDp28资讯网——每日最新资讯28at.com

也就是说我们希望命令在执行的时候能够解析出来软链接文件后面指向的源文件,直接对源文件进行读--处理--写,最后 renameaDp28资讯网——每日最新资讯28at.com

aDp28资讯网——每日最新资讯28at.com

sed 命令有一个选项 --follow-symlinksaDp28资讯网——每日最新资讯28at.com

图片图片aDp28资讯网——每日最新资讯28at.com

aDp28资讯网——每日最新资讯28at.com

我们在执行的时候加上这个选项:aDp28资讯网——每日最新资讯28at.com

图片图片aDp28资讯网——每日最新资讯28at.com

aDp28资讯网——每日最新资讯28at.com

图片图片aDp28资讯网——每日最新资讯28at.com

aDp28资讯网——每日最新资讯28at.com

总结一下:aDp28资讯网——每日最新资讯28at.com

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

本文链接:http://www.28at.com/showinfo-26-16938-0.htmlSed 原地替换文件时遇到的趣事

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 【技术革命】JDK21虚拟线程来袭,让系统的吞吐量翻倍!

下一篇: 通过研究案例,彻底掌握Python GIL

标签:
  • 热门焦点
  • 7月安卓手机性能榜:红魔8S Pro再夺榜首

    7月份的手机市场风平浪静,除了红魔和努比亚带来了两款搭载骁龙8Gen2领先版处理器的新机之外,别的也想不到有什么新品了,这也正常,通常6月7月都是手机厂商修整的时间,进入8月份之
  • 把LangChain跑起来的三个方法

    使用LangChain开发LLM应用时,需要机器进行GLM部署,好多同学第一步就被劝退了,那么如何绕过这个步骤先学习LLM模型的应用,对Langchain进行快速上手?本片讲解3个把LangChain跑起来
  • 一篇聊聊Go错误封装机制

    %w 是用于错误包装(Error Wrapping)的格式化动词。它是用于 fmt.Errorf 和 fmt.Sprintf 函数中的一个特殊格式化动词,用于将一个错误(或其他可打印的值)包装在一个新的错误中。使
  • 深度探索 Elasticsearch 8.X:function_score 参数解读与实战案例分析

    在 Elasticsearch 中,function_score 可以让我们在查询的同时对搜索结果进行自定义评分。function_score 提供了一系列的参数和函数让我们可以根据需求灵活地进行设置。近期
  • “又被陈思诚骗了”

    作者|张思齐 出品|众面(ID:ZhongMian_ZM)如今的国产悬疑电影,成了陈思诚的天下。最近大爆电影《消失的她》票房突破30亿断层夺魁暑期档,陈思诚再度风头无两。你可以说陈思诚的
  • OPPO、vivo、小米等国内厂商Q2在印度智能手机市场份额依旧高达55%

    7月20日消息,据外媒报道,研究机构的报告显示,在全球智能手机出货量同比仍在下滑的大背景下,印度这一有潜力的市场也未能幸免,出货量同比也有下滑,多家厂
  • 小米MIX Fold 3配置细节曝光:搭载领先版骁龙8 Gen2+罕见5倍长焦

    这段时间以来,包括三星、一加、荣耀等等有不少品牌旗下的最新折叠屏旗舰都得到了不少爆料,而小米新一代折叠屏旗舰——小米MIX Fold 3此前也屡屡被传
  • 7月4日见!iQOO 11S官宣:“鸡血版”骁龙8 Gen2+200W快充加持

    上半年已接近尾声,截至目前各大品牌旗下的顶级旗舰都已悉数亮相,而下半年即将推出的顶级旗舰已经成为了数码圈爆料的主流,其中就包括全新的iQOO 11S系
  • 北京:科技教育体验基地开始登记

      北京“科技馆之城”科技教育体验基地登记和认证工作日前启动。首批北京科技教育体验基地拟于2023年全国科普日期间挂牌,后续还将开展常态化登记。  北京科技教育体验基
Top