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 中的内容。