sed包含在脚本中时不起作用



我有一个公共dns列表(在一个名为dns.test的文件中(。它的一些元素似乎无法解析。我需要消除它们。这是文件:

199.255.137.34
103.112.162.165
103.133.222.202
82.146.26.2
94.236.218.254
185.81.41.81
103.209.52.250
119.160.80.164
8.8.8.8
8.8.4.4
151.80.222.79

注意:没有空格、尾随空格或标题空格。

我做了一个片段,逐一检查并删除有缺陷的:

while IFS='n' read -r LINE;do dig +short +timeout=1 serverfault.com @${LINE} &>/dev/null;[[ $? -eq 0 ]] && echo "${LINE} -> OK" || { echo "${LINE} -> NOK";sed -i "s/${LINE}//g" dns.test; };done< <(cat dns.test)

我缩短了暂停时间,否则太慢了!

但是sed部分不起作用;我将代码片段的sed部分建立在以下测试的基础上:

LINE=199.255.137.34;sed -i "s/${LINE}//g" dns.test  #-> this works manually but not when included in the script.

谢谢大家!!

此任务不需要使用sed。只需打印出工作的dns服务器的地址,并用输出替换原始文件的内容。你可以试试这个:

while read -r ipaddr; do
dig +short +timeout=1 serverfault.com @"$ipaddr" &>/dev/null && echo "$ipaddr"
done < dns.test > working-dns.test

以及如果CCD_ 3的内容看起来良好则为CCD_。

下面的代码应该可以工作,请注意char'<'的用法和">"。

LINE="199.255.137.34";sed -i "/<$LINE>/d" dns.test

最新更新