파일에서 특정 줄을 삭제하는 방법은 무엇입니까?

파일에서 특정 줄을 삭제하는 방법은 무엇입니까?

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에 무엇이 들어 있는지 주의를 기울여야 합니다.

관련 정보