使用 sed 编辑 /etc/fstab

1 bash sed

/etc/fstab 行我想编辑:

/dev/appvg/home         /home     ext3    defaults        0 0
Run Code Online (Sandbox Code Playgroud)

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

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

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

这给了我这个:

/dev/appvg/home         /home     ext3    nodev,defaults  0 0
Run Code Online (Sandbox Code Playgroud)

这就是我想要的样子:

/dev/appvg/home         /home     ext3    defaults,nodev  0 0
Run Code Online (Sandbox Code Playgroud)

是否可以?我是 sed 的新手...

Pau*_*and 5

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

sed -ie '/^\/dev\/appvg\/home/ s/defaults/defaults,nodev/' /etc/fstab
Run Code Online (Sandbox Code Playgroud)

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

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

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

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