SED는 셸에서는 작동하지만 스크립트에서는 작동하지 않습니다.

SED는 셸에서는 작동하지만 스크립트에서는 작동하지 않습니다.
 cat test.txt

Host01-pc.local

 i=host01-pc.local
 sed -i "/$i/d" ./test.txt
 cat test.txt

따라서 이것은 셸에서 작동하지만 스크립트에서 실행하면

readarray PC < ./test.txt

for i in "${PC[@]}";
do

        ping -c 1 -W 20 $i

        if [ $? -eq 0 ];
                then echo -e "$i is reachable";
                sed -i "/$i/d" ./test.txt

        else
                        
                        echo -e "$i no ping"

        fi
done

오류 메시지가 나타납니다

sed: -e 표현식 #1, 문자 26: 종료되지 않은 주소 정규 표현식

답변1

더 큰 버전의 플러시 버전인지는 확실하지 않으며 원본 스크립트에서 최소한의 세부 사항만 수정했습니다. GNU Bash에서 테스트되었습니다.

#!/usr/bin/bash
readarray -t arr < test.txt
for i in "${arr[@]}"; do
    if ping -c 1 -W 20 "$i" > /dev/null 2>&1; then
        echo "$i is reachable"
        sed -i "/$i/d" test.txt
    else
        echo "$i no ping"
    fi
done

*-t추가된 플래그에 대해 의견을 주신 @steeldriver에게 감사드립니다 readarray.

관련 정보