我是shell脚本的新手,我正在尝试编写一个小脚本来下载和解析主机文件。
cd /tmp
rm hosts*
#Download files
aria2c -j 10 http://winhelp2002.mvps.org/hosts.txt -o hostsA
aria2c -j 10 "http://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&showintro=0&mimetype=plaintext" -o hostsB
#Parse files
sed 's/0.0.0.0/127.0.0.1/' hostsA> hostsM
sed -n '/^127.0.0.1/p' hostsB >> hostsM
#Remove duplicates
awk '!x[$0]++' hostsM > hosts
#mv /etc/hosts /etc/hosts.backup
#mv hosts.txt /etc/hosts
echo "Complete."
例如,以下条目发生两次:
127.0.0.1 newopenx.detik.com
Here完整的主机很好。
我做错了什么?
答案 0 :(得分:1)
将你的awk改为:
awk '{sub(/\r/, "")} !x[$0]++' hostsM > hosts
由于原始主机文件中的某些行在\r
之前有\n
(例如DOS EOL
)。
答案 1 :(得分:0)
如果您不介意排序,-u
的{{1}}选项会删除重复项。助记符:独特。
sort
您之前的行正在复制以127.0.0.1开头的每一行。如果您只想保留它们并丢弃其他的,请使用-n选项:
sort -u hostsM >hosts