Tenho uma lista linha por linha dos domínios que obtive
for domain in $(nginx -qT | grep -E "^[[:space:]]*server_name" | grep -Ev "^[[:space:]]*#" | sed 's/^[ \t]*//' | sed 's/server_name //g' | tr -d \; | grep -Ev "^_$" | sort | uniq); do echo $domain; done
da configuração do Nginx.
Legivelmente:
for domain in $(
nginx -qT |
grep -E "^[[:space:]]*server_name" |
grep -Ev "^[[:space:]]*#" |
sed 's/^[ \t]*//' |
sed 's/server_name //g' |
tr -d \; |
grep -Ev "^_$" |
sort |
uniq
); do
echo $domain;
done
Eu também tenho vários arquivos de configuração dentro do /etc/nginx/conf.d/
diretório cujo nome é domain.conf
.
Quero extrair apenas domínios da primeira lista descritos pelos arquivos de configuração da segunda lista.
O que posso fazer para mesclar essas duas listas e extrair da lista final domínios exclusivos, mantendo apenas os domínios contidos em ambas as listas?
A segunda lista que faço por
for directory in $(grep -ir "include" /etc/nginx/nginx.conf | grep -Ev "^[[:space:]]*#" | grep -v "fastcgi_params\|mime.types" | sed 's/;//g' | grep -o "/.*"); do ls $directory; done
Quero usar essas coisas no script Bash, para que as listas permaneçam como valores de variáveis e não como arquivos. Tentei usar comm
o comando também, mas devido às variáveis não funciona.
Você pode usar o recurso Substituição de Processo em
bash
:Portanto, se você tiver duas variáveis, poderá ordenar seu conteúdo e passá-las como Substituição de Processo para o
comm
comando:Por exemplo, supondo que eu queira encontrar todos os números que são divisíveis por 2 e 3 entre 0 e 12:
De acordo com a resposta do @aviro, a consulta resultante é semelhante a: