Mamy skrypt, który pobiera listę domen do zablokowania naszego pola squid, ale nadal otrzymujemy ostrzeżenia w następujący sposób:
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
Czy istnieje sposób na przejście przez plik i usunięcie subdomen z istniejących domen na liście?
Więc chwyć pierwszą linię i sprawdź, czy w tekście są jakieś inne linie kończące się tym tekstem i usuń go?
Odpowiedzi:
Oto jak to zrobić w Perlu:
Jeden liner Perla przechodzi przez
a.txt
i dodawanie każdej linii do nazwy hash%h
. Po dodaniu każdej linii pliku przechodzi on przez każdy klucz skrótu, usuwa pierwszą część domeny (pierwszy okres aż do drugiego okresu), a jeśli wynikowy ciąg nie znajduje się w skrócie, drukuje go. Wyjście jest następnie przesyłane przewodowosort
(możesz się domyślić, co to robi) i zapisać wb.txt
.źródło
cat
jest bardziej obraźliwy.dog
osoba?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
ale dał mi jedną linię w pliku o nazwie plik2.