sed는 선택한 줄 대신 모든 줄을 삭제합니다.

sed는 선택한 줄 대신 모든 줄을 삭제합니다.

줄을 삭제 /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스크립트에 명령이 없기 때문에 아무 것도 출력하지 않습니다. 루프 끝의 기본값도 아니기 때문에 모든 줄을 인쇄합니다.pp아니요삭제되었습니다. 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

관련 정보