Aqui está uma abordagem mais simples de sed :
$ sed -E 's|(\s/\S+\s+ext[2-4]\s+defaults)|,nodev|' 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,nodev 1 2
tmpfs /dev/shm tmpfs defaults 0 0
O truque é procurar espaços em branco seguidos por / e um ou mais caracteres que não sejam espaços em branco ( \s/\S+ ), então ext[2-4] mas apenas se precedidos por espaço em branco ( \s+ext[2-4] ), mais espaço em branco e% código%. Isso deve corresponder apenas aos casos em que você está interessado. Portanto, se corresponder, substitua a correspondência inteira por ela mesma, além de defaults : nodev .
No entanto, não sei ao certo como isso é portátil. O ,nodev para expressões regulares estendidas é suportado por muitas -E implementações, mas não é POSIX. Para uma abordagem mais portátil, você pode tentar a mesma ideia em Perl:
$ perl -pe 's|(\s/\S+\s+ext[2-4]\s+defaults)|,nodev|' 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,nodev 1 2
tmpfs /dev/shm tmpfs defaults 0 0
Em ambos os casos, para editar o arquivo, use sed :
perl -i -pe 's|(\s/\S+\s+ext[2-4]\s+defaults)|,nodev|' fstab
sed -E 's|(\s/\S+\s+ext[2-4]\s+defaults)|,nodev|' fstab
Ou, para BSD ou OSX -i :
sed -i '' -E 's|(\s/\S+\s+ext[2-4]\s+defaults)|,nodev|' fstab
Observe que os itens acima assumem que a opção sed será a única ou, pelo menos, a última. Eles falharão se você tiver algo como defaults , por exemplo.