You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Sed交换文件中的/mount/m07与/m07字符串?

解决sed交换两个字符串时互相覆盖的问题

嘿,我懂你碰到的麻烦了——直接连续替换"/mount/m07"和"/m07"的时候,第一个替换后的内容会被第二个命令误匹配,导致最终两个字符串都变成同一个值。解决这个问题的核心思路是先用临时占位符“暂存”其中一个字符串,避免互相干扰,具体的sed命令如下:

sed -e 's/"\/mount\/m07/"TEMP_MARKER/g' -e 's/"\/m07/"\/mount\/m07/g' -e 's/"TEMP_MARKER/"\/m07/g' file_name

命令分步解释:

  • 第一步:把所有的"/mount/m07"替换成临时标记"TEMP_MARKER",这样后续替换"/m07"时,不会影响到原本的"/mount/m07"内容
  • 第二步:把所有的"/m07"替换成目标值"/mount/m07"
  • 第三步:把临时标记"TEMP_MARKER"替换成"/m07",完成两者的交换

测试验证:

用你提供的示例内容测试:
原始内容:

filesystem special="/abc/ca97" raw="/abc/ca97" directory="/mount/m07"
filesystem special="/abc/d1107" raw="/abc/d1107" directory="/m07"

执行命令后会输出:

filesystem special="/abc/ca97" raw="/abc/ca97" directory="/m07"
filesystem special="/abc/d1107" raw="/abc/d1107" directory="/mount/m07"

完全符合你的预期需求。

如果想要直接修改原文件(原地编辑),可以加上-i参数(GNU sed):

sed -i -e 's/"\/mount\/m07/"TEMP_MARKER/g' -e 's/"\/m07/"\/mount\/m07/g' -e 's/"TEMP_MARKER/"\/m07/g' file_name

注意:BSD sed(比如macOS系统)需要写成-i '',避免生成备份文件。

内容的提问来源于stack exchange,提问作者Sandy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:43:59