首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sed:替换/etc/fstab中的条目

sed:替换/etc/fstab中的条目
EN

Unix & Linux用户
提问于 2018-11-12 12:50:52
回答 2查看 5.1K关注 0票数 4

我正在强化我们的一些系统。作为强化过程的一部分,我需要更新/etc/fstab中的几个条目,以限制一些不同分区的功能。

尽管如此,我希望能够使用sed内联替换来更新行。下面是当前/etc/fstab的一个片段:

代码语言:javascript
复制
# /etc/fstab
# Created by anaconda on Wed Feb 21 09:37:23 2018
/dev/mapper/vg1-lv_root /                       ext4    defaults        1 1
/dev/mapper/vg1-lv_home /home                   ext4    defaults        1 2
tmpfs                   /dev/shm                tmpfs   defaults        0 0

在运行sed命令之后,我希望该文件看起来如下所示:

代码语言:javascript
复制
# /etc/fstab
# Created by anaconda on Wed Feb 21 09:37:23 2018
/dev/mapper/vg1-lv_root /                       ext4    defaults        1 1
/dev/mapper/vg1-lv_home /home                   ext4    defaults,nodev        1 2
tmpfs                   /dev/shm                tmpfs   defaults        0 0

基本上,我需要将"nodev“添加到所有属于ext2-4的行中,这些行不是根分区。

我放在一起的sed命令接近于完成这个操作,但是由于任何原因,我无法使regex与"/“分区不匹配,因此它也总是更新该行。

代码语言:javascript
复制
sed '/^[^#].*ext[2-4]/s/defaults/defaults,nodev/g' /etc/fstab

我希望关闭由空格包围的"/“,而不是vg1-lv_root。下面的方法很有效,但是我不喜欢这个解决方案,因为它很笨重:

代码语言:javascript
复制
sed '/^[^#].*ext[2-4]/s/defaults/defaults,nodev/g' /etc/fstab | sed '/^[^#].*root.*ext[2-4]/s/defaults,nodev/defaults/' > /etc/fstab
EN

回答 2

Unix & Linux用户

发布于 2018-11-12 13:11:56

当然,在贴出问题十分钟后,我终于能够让它做我想做的事了:

代码语言:javascript
复制
sed -r '/^[^#].*[ \t]+\/[^[:space:]].*ext[2-4]/s/defaults/defaults,nodev/g' /etc/fstab

如果有人有一个更清洁或更简单的答案,我很想听听。谢谢!

票数 3
EN

Unix & Linux用户

发布于 2018-11-13 04:28:17

不包括比赛很难维持。只匹配您想要的分区更安全。而且,对于只匹配一行,尾随'g‘是不必要的。

代码语言:javascript
复制
sed -r 's#(/home\s.*defaults)\s#\1,nodev #' /etc/fstab 
票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/481257

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档