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.