如何從文件中刪除特定行?

如何從文件中刪除特定行?

ip.txt我有一個包含 ip 規則的檔案 ( )

/sbin/iptables -A INPUT -p tcp -s 140.237.4.252 -j DROP
/sbin/iptables -A INPUT -p tcp -s 143.227.5.22 -j DROP

/sbin/iptables -A INPUT -p udp -s 140.237.4.252 -j DROP
/sbin/iptables -A INPUT -p tcp -s 143.227.5.22 -j DROP

我使用下面的 bash 腳本 ( removeip.sh) 從檔案中刪除屬於特定 IP 的 udp 和 tcp 行ip.txt

function removeip(){
    ip="$1"        
    udprule="/sbin/iptables -A INPUT -p udp -s "$ip" -j DROP"
    tcprule="/sbin/iptables -A INPUT -p tcp -s "$ip" -j DROP"
    sed --in-place /"$udprule"/d /root/ip.txt
    sed --in-place /"$udprule"/d /root/ip.txt     
}

removeip $1

當我在終端機中使用以下命令時

./removeip.sh 140.237.4.252

它拋出

sed: -e expression #1, char 59: unterminated `s' command

造成此問題的原因是什麼以及如何解決?

答案1

/角色是 中的運算符sed。基本上你最終會得到:

sed '//sbin/iptables -A INPUT -p tcp -s "{ip}" -j DROP/d' /root/ip.txt

這意味著您正在嘗試將 '//sb' 作為 sed 命令執行,b分隔符號在哪裡,並且它找不到另一個 'b'。

您需要引用特殊字元:

udprule="\/sbin\/iptables -A INPUT -p udp -s "$ip" -j DROP"

基於同樣的原因,您需要留意 $ip 中的內容。

相關內容