如何用Bash脚本无换行向tmp.mount指定行追加nodev参数
使用sed实现需求的解决方案
没问题,我来帮你拆解这个sed命令的实现逻辑,完全符合你的需求:
sed -i '/Options=/ { /nodev/! s/$/,nodev/ }' tmp.mount
命令逐部分解释:
-i:启用原地编辑,直接修改tmp.mount文件内容,不需要额外输出到新文件。如果你用的是macOS系统,需要写成sed -i '' '/Options=/ { /nodev/! s/$/,nodev/ }' tmp.mount(macOS的sed要求指定备份后缀,空字符串表示不生成备份文件)。/Options=/:先定位所有包含Options=关键词的行,只对这些行执行后续操作。{ ... }:把括号里的命令组合成一个代码块,确保它们只作用于前面匹配到的行。/nodev/!:匹配不包含nodev的行(!符号表示取反),如果行里已经有nodev,就跳过后续操作。s/$/,nodev/:用替换命令在行的末尾($表示行结束位置)追加,nodev,实现无换行添加的效果。
效果演示:
原文件内容:
[Mount] Options=mode=1777,strictatime,noexec,nosuid
执行命令后,文件内容变为:
[Mount] Options=mode=1777,strictatime,noexec,nosuid,nodev
如果目标行已经包含nodev(比如[Mount] Options=mode=1777,nodev,noexec,nosuid),执行命令后该行不会有任何变化,避免重复添加。
内容的提问来源于stack exchange,提问作者Dickson Chu
相关产品推荐
相关产品推荐

