簡體   English   中英

使用sed從/ etc / fstab中刪除條目

[英]Delete entry from /etc/fstab using sed

我正在編寫一個解決方案的腳本,其中,當從服務器中刪除共享驅動器時,我們也需要從fstab中刪除條目。

到目前為止,我所做的是:

MP="${ServerAddress}:${DirectoryPath} ${MountPoint} nfs defaults 0 0"

while read line; do
                if [ "${MP}" = "${line}" ]; then
                    sed "/${line}/d"
                fi
done < /etc/fstab

這給了一個錯誤>> sed:1:“ / servername.net ...”:我希望命令\\后面跟着文本

請建議對此可以刪除。

PS:我將其作為腳本的一部分運行,因此不必單獨運行。 使用建議的選項運行時,我可以刪除..但是在腳本執行過程中,此操作無效,並出現該錯誤。 人們對“”或“格式”發表評論,只是我無法從那里復制內容,因為那是通過終端服務器進行的遠程操作。

請嘗試以下操作:

sed -i.bak "\@^$SERVERADDR:$DIRPATH@d" /etc/fstab

為SERVERADDR和DIRPATH設置有意義的值之后。 該行還將備份舊文件(名為fstab.bak )。 但是由於/etc/fstab是一個非常重要的文件,因此請確保准備好更多備份。

讓我指出,您只需要那一行,沒有while循環,沒有腳本!

請注意,shell區分大小寫,並且期望用"雙引號而不是 (此問題現已解決)。您需要配置編輯器,不要為您隨機大寫單詞(也已修復)。系統配置文件是Bad Badge™。制作文件副本並在副本上進行實驗,只有當您確定腳本可以在副本上運行時,才需要對實時文件進行冒險,然后對實時文件進行備份在進行更改之前將其保存為文件(並且盡可能避免以root用戶身份進行實驗;這限制了您可以造成的損害。)

您編寫的腳本也可能不使用sed 將比較更改為!= ,只需使用echo "$line"回顯您要標准輸出的行。

MP="${ServerAddress}:${DirectoryPath} ${MountPoint} nfs defaults 0 0"

while read line; do
    if [ "${MP}" != "${line}" ]; then
    echo "$line"
    fi
done < /etc/fstab

或者,您可以在單個命令中使用sed 唯一的技巧是該模式可能包含斜杠,因此\\@表示為“使用@作為搜索標記”。

MP="${ServerAddress}:${DirectoryPath} ${MountPoint} nfs defaults 0 0"
sed -e "\@$MP@d" /etc/fstab

如果您對GNU sed滿意,則可以滿意地添加-i.bak選項以覆蓋/etc/fstab文件(在/etc/fstab.bak保留原始/etc/fstab.bak )。 或使用-i $(date +'%Y%m%d.%H%M%S')獲得當前日期/時間的備份擴展名。 或在文件上使用版本控制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM