1

/etc/fstab 我要编辑的行:

/dev/appvg/home         /home     ext3    defaults        0 0

如何让 sed 在默认列后面插入“,nodev”?

我在另一篇文章中发现了这个命令,它在“默认值”之前插入它,我不知道如何插入之后:

sed -ie 's:\(.*\)\(\s/home\s\s*\)\(\w*\s*\)\(\w*\s*\)\(.*\):\1\2\3nodev,\4\5:' /etc/fstab

这给了我这个:

/dev/appvg/home         /home     ext3    nodev,defaults  0 0

这就是我希望它的样子:

/dev/appvg/home         /home     ext3    defaults,nodev  0 0

可能吗?我是新来的...

4

3 回答 3

5

假设这正是您想要更改的,对您的问题的最简单答案是:

sed -ie '/^\/dev\/appvg\/home/ s/defaults/defaults,nodev/' /etc/fstab

这表示要做的是将 (^) 开头的行与 ^/dev/appvg/home 匹配,然后对其应用以下命令。在这种情况下,以下命令是“将默认值更改为默认值,nodev”

如果您想修改您建议进行更改的命令,那么您需要:

sed -ie 's:\(.*\)\s\(/home\)\s\s*\(\w*\)\s*\(\w*\)\s*\(.*\):\1 \2 \3 \4,nodev \5:' /etc/fstab

最后两个 ':' 字符之间的 \1、\2 等是替换标记,它们表示从表达式的第一部分替换匹配括号的内容。通过更改 \s 在匹配表达式中的位置,您只会得到单词 (\w) 字符,而不是替换中的空格 (\s) 字符。因此,您需要在结果字符串中插入自己的空格。

于 2013-10-02T22:23:20.710 回答
1

您也可以使用awk. 通常在 Linux 中,位于文件defaults的第 4 列/etc/fstab。只有当行中有 adefault时,您才能使用它来打印。

awk '/defaults/{$4="defaults,nodev"}{print}' /etc/fstab

具体到你的情况,

awk '/\/dev\/appvg\/home/{$4="defaults,nodev"}{print}' /etc/fstab
于 2013-10-02T22:25:42.957 回答
1

您也可以尝试这种方式:

sed "s*/opt/apps/app1               ext4    defaults        1 1*/opt            ext4    defaults        1 2*g" -i /etc/fstab
  • 从第*一个到第二个*:要搜索的字符串
  • 从第二个*到第三个*:要替换的字符串。

您可以先尝试不-i使用在终端上输出更改但在实际文件中实际上没有更改的选项。

于 2018-02-23T15:30:52.483 回答