1

我正在尝试/etc/fstab使用sed/进行修改awk。然而,就像在这个问题中一样,该问题中的解决方案对我来说并不完全有效。

我需要将nodev(and 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

但是,它会消除现有的空白并替换为单个选项卡。我的问题是:我怎样才能以一种不那么侵入性的方式进行这种改变? 这个答案看起来很有希望,但我对它的理解还不够好,无法适应我的使用。

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

4

2 回答 2

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第三列。练习留给读者。

于 2013-01-23T23:49:05.173 回答
1

尽管这有点晚了——这是我在我的 KickStart 文件中使用的一种方法来更改 /etc/fstab

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

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

于 2014-07-31T17:14:22.320 回答