Como remover linhas específicas de um arquivo?

2

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 abaixo do bash ( removeip.sh ) para remover as linhas udp e tcp que pertencem a um IP específico do arquivo 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

Quando eu uso o comando abaixo no terminal

./removeip.sh 140.237.4.252

lança

sed: -e expression #1, char 59: unterminated 's' command

Qual é a causa deste problema e como posso corrigi-lo?

    
por NecNecco 05.10.2014 / 17:36

1 resposta

3

O caractere / é um operador em sed . Basicamente você está acabando 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 é o separador e não pode 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.

    
por 05.10.2014 / 17:44

Tags