ファイルから特定の行を削除する方法は?

ファイルから特定の行を削除する方法は?

ip.txtIPルール()を含むファイルがあります。

/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に何が含まれているのかに注意を払う必要があります。

おすすめ記事