我有我所获得的域名的逐行列表
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
来自 Nginx 配置。
清晰可见:
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
我的目录中还有几个配置文件,/etc/nginx/conf.d/
名称为domain.conf
.
我只想从第二个列表中的配置文件描述的第一个列表中提取域。
我可以做什么来合并这两个列表并从最终列表中提取唯一域,仅保留两个列表包含的域?
我列出的第二个清单
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
我想在 Bash 脚本中使用这些东西,以便列表保留为变量值而不是文件。我也尝试过使用comm
命令,但由于变量它不起作用。
您可以在以下位置使用进程替换功能
bash
:因此,如果您有两个变量,您可以对它们的内容进行排序并将它们作为 Process Substitution 传递给命令
comm
:例如,假设我想找到 0 到 12 之间所有可被 2 和 3 整除的数字:
根据 @aviro 的回答,结果查询如下所示: