使用sed编辑/ etc / fstab

时间:2013-10-02 22:20:54

标签: bash sed

/ 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

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

3 个答案:

答案 0 :(得分:2)

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

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)字符。因此,您需要将自己的空格插入到结果字符串中。

答案 1 :(得分:1)

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

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

具体到您的情况,

awk '/\/dev\/appvg\/home/{$4="defaults,nodev"}{print}' /etc/fstab

答案 2 :(得分:1)

您也可以尝试这种方式:

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

您可以先尝试不使用-i选项,该选项会在终端上输出更改但实际文件中并未实际更改。