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