-4
我的腳本將一段文本附加到文件末尾。
### Start My Block
$IPT -A INPUT -s 8.8.8.8 -j ACCEPT
$IPT -A INPUT -s 8.8.8.4 -j ACCEPT
### End My Block
如果我的文字塊不存在,它成功地追加文件如上圖所示,使用下列內容:
HEAD="### Start My Block"
TAIL="### End My Block"
REPLACEMENT_CONTENT="
\$IPT -A INPUT -s 8.8.8.8 -j ACCEPT
\$IPT -A INPUT -s 8.8.8.4 -j ACCEPT"
echo -e "$HEAD" >> $FILE
echo -e "$REPLACEMENT_CONTENT" >> $FILE
echo -e "$TAIL" >> $FILE
如果我的文字塊存在,它試圖替換使用塊的內容以下:
HEAD="### Start My Block"
TAIL="### End My Block"
REPLACEMENT_CONTENT="
\$IPT -A INPUT -s 4.4.4.4 -j ACCEPT
\$IPT -A INPUT -s 4.4.2.2 -j ACCEPT"
perl -0777 -i -pe "s/($HEAD).*(\\n$TAIL)/\$1$REPLACEMENT_CONTENT\\$2/s" $FILE
問題是,我失去了 「$ IPT」 和最終使用下列內容:
### Start My Block
-A INPUT -s 4.4.4.4 -j ACCEPT
-A INPUT -s 4.4.2.2 -j ACCEPT
### End My Block
當我輸出上述通過「>>」,美元符號轉義\ $,包括$ IPT。當我重新訪問該文件以替換$ HEAD和$ TAIL之間的現有內容並在更新的塊中使用perl函數時,逃逸的美元符號似乎不成立。我的猜測是它被解釋,我不知道如果逃避是不夠的,如何防止這種情況。
有誰知道我如何修改上面的命令來維護「$ IPT」?
什麼是在變量'HEAD','TAIL'和'REPLACEMENT_CONTENT'?或者你是否真的期望我們成爲mindreaders? – tripleee
謝謝!三重逃脫做到了! –