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
removeip.sh
ファイルから特定のIPに属するudpおよびtcp行を削除するには、次のbashスクリプト()を使用しています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に何が含まれているのかに注意を払う必要があります。