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

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

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

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

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

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

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

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

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

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

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

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

sed 让文件属性变了?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

标签:
  • 热门焦点
  • 2023 年的 Node.js 生态系统

    随着技术的不断演进和创新,Node.js 在 2023 年达到了一个新的高度。Node.js 拥有一个庞大的生态系统,可以帮助开发人员更快地实现复杂的应用。本文就来看看 Node.js 最新的生
  • 服务存储设计模式:Cache-Aside模式

    Cache-Aside模式一种常用的缓存方式,通常是把数据从主存储加载到KV缓存中,加速后续的访问。在存在重复度的场景,Cache-Aside可以提升服务性能,降低底层存储的压力,缺点是缓存和底
  • 企业采用CRM系统的11个好处

    客户关系管理(CRM)软件可以为企业提供很多的好处,从客户保留到提高生产力。  CRM软件用于企业收集客户互动,以改善客户体验和满意度。  CRM软件市场规模如今超过580
  • 多线程开发带来的问题与解决方法

    使用多线程主要会带来以下几个问题:(一)线程安全问题  线程安全问题指的是在某一线程从开始访问到结束访问某一数据期间,该数据被其他的线程所修改,那么对于当前线程而言,该线程
  • 猿辅导与新东方的两种“归途”

    作者|卓心月 出品|零态LT(ID:LingTai_LT)如何成为一家伟大企业?答案一定是对“势”的把握,这其中最关键的当属对企业战略的制定,且能够站在未来看现在,即使这其中的
  • 签约井川里予、何丹彤,单视频点赞近千万,MCN黑马永恒文希快速崛起!

    来源:视听观察永恒文希传媒作为一家MCN公司,说起它的名字来,可能大家会觉得有点儿陌生,但是说出来下面一串的名字之后,或许大家就会感到震惊,原来这么多网红,都签约这家公司了。根
  • iQOO Neo8 Pro抢先上架:首发天玑9200+ 安卓性能之王

    经过了一段时间的密集爆料,昨日iQOO官方如期对外宣布:将于5月23日推出全新的iQOO Neo8系列新品,官方称这是一款拥有旗舰级性能调校的作品。随着发布时
  • OPPO K11评测:旗舰级IMX890加持 2000元档最强影像手机

    【Techweb评测】中端机型用户群体巨大,占了中国目前手机市场的大头,一直以来都是各手机品牌的“必争之地”,其中OPPO K系列机型一直以来都以高品质、
  • 外交部:美方应停止在网络安全问题上不负责任地指责他国

      中国外交部今天(16日)举行例行记者会。会上,有记者问,美国情报官员称,他们正在阻拦来自中国以及其他国家的黑客获取相关科研成果。 中方对此有何评论?对此
Top