行を削除し/etc/fstab
てそのsed
コマンドを使用したいのですが、ファイルの内容はすべて削除されます。
私のものfstab
:
/dev/mapper/vg00-lv_root / xfs defaults 0 0
/dev/mapper/vg00-lv_backup /backup xfs defaults 0 0
UUID=30d58f5e-a432-4739-98f9-3f2ceb66fc03 /boot ext4 defaults 1 2
/dev/mapper/vg00-lv_wsbackup /wsbackup xfs defaults 0 0
UUID=a59bad9c-8c89-4b20-aadd-e83c4ab22a6c swap swap defaults 0 0
10.10.10.10 /mnt/wsbackup cifs user=user,password=password,domain=domain,vers=2.1 0 0
私のスクリプト:
MNTDIR="/mnt/wsbackup"
if grep -q "$MNTDIR" "/etc/fstab"
then
sed -i -n "\:$MNTDIR:d" /etc/fstab
else
...
fi
スクリプトでそのコマンドを使用すると、sed "\:$MNTDIR:d" /etc/fstab
私が望む結果が出力されます。
[root@labor-ssd ~]# sh check.sh
/dev/mapper/vg00-lv_root / xfs defaults 0 0
/dev/mapper/vg00-lv_backup /backup xfs defaults 0 0
#/dev/sdb /backup ext4 defaults 0 0
UUID=30d58f5e-a432-4739-98f9-3f2ceb66fc03 /boot ext4 defaults 1 2
/dev/mapper/vg00-lv_wsbackup /wsbackup xfs defaults 0 0
UUID=a59bad9c-8c89-4b20-aadd-e83c4ab22a6c swap swap defaults 0 0
INFO: user mount configuration removed
ただし、変更はファイルに書き込まれないため、この-i
オプションを使用して変更をファイルに書き込みます。それ以降は、ファイルが完全に空になっている理由がわかりません。
答え1
./etc/fstab
-i
-n
このオプションは通常、各サイクルの終わりに実行される「デフォルト(印刷)コマンド」を-n
オフにします。p
を使用すると、-n
スクリプトは実際には何も出力しません。オプションを削除しても-i
スクリプトにコマンドがないため、何も出力しません。ループの終わりのデフォルトではないので、すべての行を印刷します。p
p
いいえ削除されました。sed
スクリプトは何も出力しないため、変更を適用するように指示するとファイルがsed
消去-i
されます。
したがって、問題を解決するには、-n
コマンドから問題を削除します。
個人的には、私は次のようにコードを書きます。
mntdir=/mnt/wsbackup
cp /etc/fstab /etc/fstab.orig
sed "\\:$mntdir:d" /etc/fstab.orig >/etc/fstab
これにより、元のファイルのコピーを保持できますfstab
。
または、
mntdir=/mnt/wsbackup
sed -i.orig "\\:$mntdir:d" /etc/fstab
sed
これは、使用する実装に応じてほぼ同じことを行います。
ファイルに文字列が見つからない場合は、ファイルに何もしないでgrep -q -F -e "$mntdir" /etc/fstab
テストにラップする必要があります(すでに行ったものと似ています)。$mntdir
mntdir=/mnt/wsbackup
grep -q -F -e "$mntdir" /etc/fstab &&
sed -i.orig "\\:$mntdir:d" /etc/fstab