Linux
sed + 在行首添加字元串,但如果已經存在則忽略
這是範例如何在與 fstab 中的 UUID 編號匹配時在行首添加字元串
sed -e "/UUID=953b1921-ac73-4b7b-abaf-ff983b0fce8a/ s/^/###FAULTY_DISK###/" -i /etc/fstab
我們可以驗證
more /etc/fstab ###FAULTY_DISK###UUID=953b1921-ac73-4b7b-abaf-ff983b0fce8a /data/sdc ext4 defaults,noatime 0 0
但在第二次執行時我們得到
sed -e "/UUID=953b1921-ac73-4b7b-abaf-ff983b0fce8a/ s/^/###FAULTY_DISK###/" -i /etc/fstab more /etc/fstab ###FAULTY_DISK######FAULTY_DISK###UUID=953b1921-ac73-4b7b-abaf-ff983b0fce8a /data/sdc ext4 defaults,noatime 0 0
如何告訴 sed 忽略添加
###FAULTY_DISK###
,以防它已經在文件 fstab 中設置
僅當它以該 UUID 開頭時才附加:
sed -e 's/^UUID=953b1921-ac73-4b7b-abaf-ff983b0fce8a/###FAULTY_DISK###&/' /etc/fstab
或者,如果您也想忽略前導空格(如果有的話):
sed -e 's/^[[:blank:]]*UUID=953b1921-ac73-4b7b-abaf-ff983b0fce8a/###FAULTY_DISK###&/' /etc/fstab
另一種方法是跳過帶有
###FAULTY_DISK###
. 考慮這個範例文件,其中一行帶有錯誤磁碟註釋,另一行沒有:$ cat fstab UUID=953b1921-ac73-4b7b-abaf-ff983b0fce8a /data/sdc ext4 defaults,noatime 0 0 ###FAULTY_DISK###UUID=953b1921-ac73-4b7b-abaf-ff983b0fce8a /data/sdc ext4 defaults,noatime 0 0
您可以使用
n
命令 insed
移動到下一行。因此sed
,如果此行與錯誤消息匹配,請告訴移動到下一行:$ sed "/###FAULTY_DISK###/n; s/UUID=953b1921-ac73-4b7b-abaf-ff983b0fce8a/###FAULTY_DISK###&/" fstab ###FAULTY_DISK###UUID=953b1921-ac73-4b7b-abaf-ff983b0fce8a /data/sdc ext4 defaults,noatime 0 0 ###FAULTY_DISK###UUID=953b1921-ac73-4b7b-abaf-ff983b0fce8a /data/sdc ext4 defaults,noatime 0 0
如您所見,該消息僅添加到沒有它的行中。