Nous avons un script qui télécharge une liste de domaines que notre calmar peut bloquer, mais nous continuons à recevoir des avertissements tels que:
2015/03/02 17:08:47| WARNING: You should probably remove '.artnau.com' from the ACL named 'chat_domains'
2015/03/02 17:08:47| WARNING: '.artnau.com' is a subdomain of '.css.artnau.com'
2015/03/02 17:08:47| WARNING: because of this '.css.artnau.com' is ignored to keep splay tree searching predictable
2015/03/02 17:08:47| WARNING: You should probably remove '.artnau.com' from the ACL named 'chat_domains'
2015/03/02 17:08:47| WARNING: '.chatserve.com' is a subdomain of '.eagles.chatserve.com'
2015/03/02 17:08:47| WARNING: because of this '.eagles.chatserve.com' is ignored to keep splay tree searching predictable
Existe-t-il un moyen de parcourir le fichier et de supprimer les sous-domaines des domaines existants de la liste?
Alors prenez la première ligne et vérifiez s'il y a d'autres lignes dans le texte qui se terminent par ce texte et supprimez-le?
Réponses:
Voici comment vous le feriez en Perl:
Perl one-liner effectue une boucle
a.txt
et ajoute chaque ligne à un hachage nommé%h
. Une fois que chaque ligne du fichier est ajoutée, il parcourt toutes les clés du hachage, supprime la première partie du domaine (la première période jusqu'à la seconde période) et, si la chaîne résultante n'est pas dans le hachage, l'affiche. La sortie est ensuite acheminéesort
(vous pouvez probablement deviner ce que cela fait) et enregistréeb.txt
.la source
cat
est plus offensant.dog
personne?find BL -name "domains" -print0 | xargs -0 -I file cat file | perl -ne 'BEGIN { my %h; } $h{$_} = ""; END { foreach (keys %h) { $orig = $_; $_ =~ s/^\..*?\./\./; print $orig if not exists $h{$_} } }' | sort > file2
mais cela m'a donné une ligne dans un fichier appelé fichier2.