日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

Sed 原地替換文件時遇到的趣事

來源: 責編: 時間:2023-11-04 23:04:48 319觀看
導讀哈嘍大家好,我是咸魚在文章《三劍客之 sed》中咸魚向大家介紹了文本三劍客中的 sedsed 全名叫 stream editor,流編輯器,用程序的方式來編輯文本那么今天咸魚打算講一下我在用 sed 原地替換文件時遇到的趣事sed 讓文件屬

哈嘍大家好,我是咸魚vXl28資訊網——每日最新資訊28at.com

vXl28資訊網——每日最新資訊28at.com

在文章《三劍客之 sed》中咸魚向大家介紹了文本三劍客中的 sedvXl28資訊網——每日最新資訊28at.com

vXl28資訊網——每日最新資訊28at.com

sed 全名叫 stream editor,流編輯器,用程序的方式來編輯文本vXl28資訊網——每日最新資訊28at.com

vXl28資訊網——每日最新資訊28at.com

那么今天咸魚打算講一下我在用 sed 原地替換文件時遇到的趣事vXl28資訊網——每日最新資訊28at.com

vXl28資訊網——每日最新資訊28at.com

vXl28資訊網——每日最新資訊28at.com

sed 讓文件屬性變了?

vXl28資訊網——每日最新資訊28at.com

有這么一個普通文件 test.txt ,內容如下:vXl28資訊網——每日最新資訊28at.com

圖片圖片vXl28資訊網——每日最新資訊28at.com

vXl28資訊網——每日最新資訊28at.com

link_test.txt 是一個軟鏈接(Symbolic Link,也可以叫符號鏈接)文件,指向 test.txt 文件vXl28資訊網——每日最新資訊28at.com

圖片圖片vXl28資訊網——每日最新資訊28at.com

vXl28資訊網——每日最新資訊28at.com

軟鏈接文件類似于 Windows 的快捷方式,它實際上是一個特殊的文件。關于軟鏈接相關的內容這里不過多介紹vXl28資訊網——每日最新資訊28at.com

vXl28資訊網——每日最新資訊28at.com

如果我們對軟鏈接文件內容進行修改,源文件是會跟著改變的vXl28資訊網——每日最新資訊28at.com

圖片圖片vXl28資訊網——每日最新資訊28at.com

vXl28資訊網——每日最新資訊28at.com

當我使用 sed 對軟鏈接文件 link_test.txt 進行內容修改時,命令如下vXl28資訊網——每日最新資訊28at.com

圖片圖片vXl28資訊網——每日最新資訊28at.com

vXl28資訊網——每日最新資訊28at.com

有趣的現象發生了:使用 sed 對軟鏈接文件 link_test.txt 進行內容修改之后,源文件 test.txt 內容沒有變化,軟鏈接文件link_test.txt 的內容發生變化且變成了普通文件vXl28資訊網——每日最新資訊28at.com

圖片圖片vXl28資訊網——每日最新資訊28at.com

vXl28資訊網——每日最新資訊28at.com

怎么樣,是不是很神奇?sed 不但把文件內容改了,還把文件屬性也給改了vXl28資訊網——每日最新資訊28at.com

vXl28資訊網——每日最新資訊28at.com

我們用 strace 工具來查看一下在執行 sed 命令時操作系統做了哪些操作vXl28資訊網——每日最新資訊28at.com

vXl28資訊網——每日最新資訊28at.com

vXl28資訊網——每日最新資訊28at.com

strace 一個系統調用跟蹤工具,它會跟蹤并記錄命令運行期間的系統調用和信號vXl28資訊網——每日最新資訊28at.com

vXl28資訊網——每日最新資訊28at.com

vXl28資訊網——每日最新資訊28at.com

圖片圖片vXl28資訊網——每日最新資訊28at.com

vXl28資訊網——每日最新資訊28at.com

具體內容有點多,我們著重看下關鍵內容vXl28資訊網——每日最新資訊28at.com

圖片圖片vXl28資訊網——每日最新資訊28at.com

vXl28資訊網——每日最新資訊28at.com

由上圖可以知道,如果我們使用 sed 對一個文件進行原地替換,需要有一個臨時文件,sed 先把修改內容寫入到這個文件,最后將文件 rename 到原來的地方vXl28資訊網——每日最新資訊28at.com

vXl28資訊網——每日最新資訊28at.com

那我的需求是對軟鏈接文件 link_test.txt 進行內容修改,軟鏈接文件屬性不變,且源文件的內容也跟著改變,有沒有什么方法呢?vXl28資訊網——每日最新資訊28at.com

vXl28資訊網——每日最新資訊28at.com

也就是說我們希望命令在執行的時候能夠解析出來軟鏈接文件后面指向的源文件,直接對源文件進行讀--處理--寫,最后 renamevXl28資訊網——每日最新資訊28at.com

vXl28資訊網——每日最新資訊28at.com

sed 命令有一個選項 --follow-symlinksvXl28資訊網——每日最新資訊28at.com

圖片圖片vXl28資訊網——每日最新資訊28at.com

vXl28資訊網——每日最新資訊28at.com

我們在執行的時候加上這個選項:vXl28資訊網——每日最新資訊28at.com

圖片圖片vXl28資訊網——每日最新資訊28at.com

vXl28資訊網——每日最新資訊28at.com

圖片圖片vXl28資訊網——每日最新資訊28at.com

vXl28資訊網——每日最新資訊28at.com

總結一下:vXl28資訊網——每日最新資訊28at.com

  • sed 替換的底層邏輯是把更新后的內容寫入一個臨時文件里面,然后再 rename 這個臨時文件
  • 這樣就會使得如果沒有添加 –follow-symlinks 選項的話,對軟鏈接文件進行 sed 操作就會使得軟鏈文件變成了一個常規文件(其實是那個臨時文件重命名導致的)
  • 如果要對軟鏈接文件指向的源文件進行操作,就需要添加 –follow-symlinks 選項

本文鏈接:http://www.www897cc.com/showinfo-26-16938-0.htmlSed 原地替換文件時遇到的趣事

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 【技術革命】JDK21虛擬線程來襲,讓系統的吞吐量翻倍!

下一篇: 通過研究案例,徹底掌握Python GIL

標簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 屯留县| 永城市| 资溪县| 股票| 天门市| 东海县| 宁波市| 靖州| 伽师县| 阳新县| 宣汉县| 四平市| 独山县| 依兰县| 瑞安市| 荣成市| 新闻| 肃北| 丹东市| 湄潭县| 大港区| 莱州市| 花垣县| 乌苏市| 石家庄市| 通山县| 闸北区| 莱州市| 沁源县| 会宁县| 巴里| 霍山县| 阿鲁科尔沁旗| 涟源市| 河北区| 文成县| 昌都县| 宜阳县| 错那县| 浑源县| 伊金霍洛旗|