我正在强化我们的一些系统。作为强化过程的一部分,我需要更新/etc/fstab中的几个条目,以限制一些不同分区的功能。
尽管如此,我希望能够使用sed内联替换来更新行。下面是当前/etc/fstab的一个片段:
# /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命令之后,我希望该文件看起来如下所示:
# /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与"/“分区不匹配,因此它也总是更新该行。
sed '/^[^#].*ext[2-4]/s/defaults/defaults,nodev/g' /etc/fstab我希望关闭由空格包围的"/“,而不是vg1-lv_root。下面的方法很有效,但是我不喜欢这个解决方案,因为它很笨重:
sed '/^[^#].*ext[2-4]/s/defaults/defaults,nodev/g' /etc/fstab | sed '/^[^#].*root.*ext[2-4]/s/defaults,nodev/defaults/' > /etc/fstab发布于 2018-11-12 13:11:56
当然,在贴出问题十分钟后,我终于能够让它做我想做的事了:
sed -r '/^[^#].*[ \t]+\/[^[:space:]].*ext[2-4]/s/defaults/defaults,nodev/g' /etc/fstab如果有人有一个更清洁或更简单的答案,我很想听听。谢谢!
发布于 2018-11-13 04:28:17
不包括比赛很难维持。只匹配您想要的分区更安全。而且,对于只匹配一行,尾随'g‘是不必要的。
sed -r 's#(/home\s.*defaults)\s#\1,nodev #' /etc/fstab https://unix.stackexchange.com/questions/481257
复制相似问题