Use ssh?
A maioria dos comandos pode ser executada remotamente, basta prefixar o comando ssh
, portanto, substitua tail -F access.log
por ssh REMOTEHOST tail -F access.log
== >
ssh myUSER@myREMOTEHOST tail -F access.log |
awk '{print $8}' |
awk '{gsub("http://|/.*","")}2' | awk '{gsub("http://|:.*","")}1' |
grep -E -v "([0-9]{1,3}\.){3})[0-9]{1,3}" | while read i ;
do
nslookup $i $dnsServerIP;
done > ips.txt
Como @kasperd e @archemar também sugeriram, você poderia / deveria limpar esse longo pipeline. Aqui está minha opinião:
ssh myUSER@myREMOTEHOST tail -F access.log |
awk '{$0=$8; gsub("https?://|[/:].*","")} !/([0-9]{1,3}.){1,3}[0-9]{1,3}/' |
while read i ; do
nslookup $i $dnsServerIP;
done > ips.txt
Explicação:
-
$0=$8
. Na saída do seu exemplo, a coluna com o URL que você deseja é o número 8. Este comando sobrescreve$0
(a linha inteira) com apenas o elemento$8
, efetivamente jogando fora o resto. Isso substitui'{print $8}'
-
gsub("https?://|[/:].*","")}
substitui as duas chamadas do gsub por uma que abrange todas as possibilidades em uma. Em seu código, você também pesquisou "http: //" duas vezes e não encontrou http s . -
!/([0-9]{1,3}.){1,3}[0-9]{1,3}/'
substitui sua chamada grep separada ao usar exatamente a mesma expressão regular. Ele é avaliado como verdadeiro, quando$0
não é um IP numérico, e isso implicitamente{print $0}'
. Um pouco mais curtoh=$0;gsub(/[0-9.]/,"",h)} h
tem o mesmo efeito.
Observação: as porcentagens 2
e 1
atrás do }
de suas gsub
-calls são avaliadas como true
, que por sua vez é expandida implicitamente para true {print $0}
. É assim / por que a última regex na minha solução imprime implicitamente a linha não correspondente.