ファイルから特定の行を削除するにはどうすればよいですか?

ファイルから特定の行を削除するにはどうすればよいですか?

ip.txtIPルールを含むファイル( )があります

/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 の内容にも注意する必要があります。

関連情報