
Tengo un archivo ( ip.txt
) que contiene reglas 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
Estoy usando el siguiente script bash ( removeip.sh
) para eliminar las líneas udp y tcp que pertenecen a una IP específica del ip.txt
archivo.
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
Cuando uso el siguiente comando en la terminal
./removeip.sh 140.237.4.252
arroja
sed: -e expression #1, char 59: unterminated `s' command
¿Cuál es la causa de este problema y cómo puedo solucionarlo?
Respuesta1
El /
personaje es un operador en sed
. Básicamente estás terminando con:
sed '//sbin/iptables -A INPUT -p tcp -s "{ip}" -j DROP/d' /root/ip.txt
Esto significa que está intentando ejecutar '//sb' como un comando sed, donde b
está el separador, y no puede encontrar otra 'b'.
Deberías citar los caracteres especiales:
udprule="\/sbin\/iptables -A INPUT -p udp -s "$ip" -j DROP"
Y deberías tener cuidado con lo que hay en $ip por la misma razón.