/ 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
有可能吗?我是新来的...
答案 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
*
到第二个*
:要搜索的字符串*
到第三个*
:要替换为。您可以先尝试不使用-i
选项,该选项会在终端上输出更改但实际文件中并未实际更改。