SED 在 shell 中有效,但在脚本中无效

SED 在 shell 中有效,但在脚本中无效
 cat test.txt

主机01-pc.local

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

所以这在 shell 中有效,但是当我在脚本中运行它时

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

*感谢@steeldriver 对-t添加到 的标志的评论readarray

相关内容