
Eu tenho um arquivo ( ip.txt
) que contém regras de 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
Estou usando o script bash ( removeip.sh
) abaixo para remover linhas udp e tcp que pertencem a um IP específico do ip.txt
arquivo.
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
Quando eu uso o comando abaixo no terminal
./removeip.sh 140.237.4.252
isso joga
sed: -e expression #1, char 59: unterminated `s' command
Qual é a causa desse problema e como posso corrigi-lo?
Responder1
O /
personagem é um operador em sed
. Basicamente você está terminando com:
sed '//sbin/iptables -A INPUT -p tcp -s "{ip}" -j DROP/d' /root/ip.txt
Isso significa que você está tentando executar '//sb' como um comando sed, onde b
está o separador, e não consegue encontrar outro 'b'.
Você precisaria citar os caracteres especiais:
udprule="\/sbin\/iptables -A INPUT -p udp -s "$ip" -j DROP"
E você precisaria estar atento ao que está em $ip pelo mesmo motivo.