使用sed更改/ etc / fstab,第二部分

时间:2013-01-23 23:31:24

标签: sed awk

我正在尝试使用/etc/fstab / sed修改awk。与this question非常相似,但问题中的解决方案并非完全为我工作。

我需要将nodev(和nosuid)选项添加到nfsnfs4挂载点。

我有工作;

awk '$4!~/nodev/&&$3~"nfs"{$4=$4",nodev"}1' OFS="\t" /etc/fstab > /etc/fstab.tmp && mv /etc/fstab.tmp /etc/fstab

awk '$4!~/nosuid/&&$3~"nfs"{$4=$4",nosuid"}1' OFS="\t" /etc/fstab > /etc/fstab.tmp && mv /etc/fstab.tmp /etc/fstab

但是,它会删除现有的空白区域并替换为单个选项卡。我的问题是:如何以较少侵入性的方式进行此更改? This answer看起来很有前途,但我不太了解它以使其适应我的使用。

我对sedawk以外的解决方案持开放态度,但默认的Red Hat / CentOS环境中需要存在任何其他工具(在Kickstart的%post期间)。

2 个答案:

答案 0 :(得分:2)

不幸的是,如果您更改任何字段,awk确实会产生空格。但这对sed来说非常简单。如果您的sed支持\S来表示非空格,则可以执行以下操作:

sed 's/\S\S*/&,nodev/4',nodev追加到第4列。所以试试:

sed -e '/nfs/{/nodev/!s/\S\S*/&,nodev/4}' -e '/nfs/{/nosuid/!s/\S\S*/&,nosuid/4}'

如果您的sed不允许/S,请改用[^ ](确认空格和括号内的标签。)这不会限制nfs与第3列的匹配。为读者留下了锻炼。

答案 1 :(得分:1)

即使这有点晚了 - 这是我在KickStart文件中使用的方法来改变/ etc / fstab

    sed -i '/tmp\s/ s/defaults/rw,nodev,noexec,nosuid/' /etc/fstab

基本上,当它看到/tmp后面跟着至少一个空格的行时,它会用defaults替换单词rw,nodev,noexec,nosuid。没有大惊小怪,没有麻烦。