filtered_logs=$(egrep "$m1|$m2|$m3" $logpath$logname |grep -E 'folder=Bulk' |grep -v "from=<.*@yy.com>,to=")
时间: 2023-12-22 10:02:28 浏览: 34
您的命令中有一些问题,特别是在第二个grep命令中的正则表达式和第三个grep命令中的排除模式。
请尝试使用以下命令来筛选符合条件的日志:
```bash
filtered_logs=$(egrep 'folder=Bulk' $logpath$logname | grep -Ev 'from=<.*@yy\.com>,to=.*@yy\.com')
```
这个命令将首先使用egrep命令来匹配包含"folder=Bulk"的行,然后通过管道将结果传递给grep命令。第二个grep命令使用正则表达式`'from=<.*@yy\.com>,to=.*@yy\.com'`来排除包含"from"字段为"*@yy.com"的行。
请注意,我修改了正则表达式中的一些模式匹配,以确保它们能正确地转义特殊字符。
将筛选后的日志存储在变量`filtered_logs`中,您可以根据需要进一步处理或输出这些日志。
相关问题
我只想让他输出删除了哪些镜像,其他的不需要输出,基于以下脚本修改:#!/bin/bash # 获取所有镜像列表,并按照创建时间排序 image_list=$(docker image ls --format "{{.Repository}}:{{.Tag}}|{{.CreatedAt}}" | sort -t "|" -k2,2) # 获取所有镜像名 image_names=$(echo "$image_list" | awk -F ':' '{print $1}' | uniq) # 遍历每个镜像名 for image_name in $image_names; do # 获取特定镜像名的镜像列表 filtered_images=$(echo "$image_list" | awk -F ':' -v name="$image_name" '$1 == name') # 获取镜像数量 image_count=$(echo "$filtered_images" | wc -l) # 如果镜像数量超过3个,则删除旧的镜像,只保留最近的两个 if [ $image_count -gt 3 ]; then images_to_delete=$((image_count - 2)) images_to_delete_list=$(echo "$filtered_images" | head -n $images_to_delete | cut -d "|" -f 1) for image in $images_to_delete_list; do docker image rm $image done echo "针对镜像名 $image_name:旧的镜像已删除,只保留最近的两个镜像。" else echo "针对镜像名 $image_name:无需删除镜像,数量未超过3个。" fi done
好的,根据你的要求,我已经修改了脚本,使其只输出删除的镜像名称。请尝试以下修改后的脚本:
```bash
#!/bin/bash
# 获取所有镜像列表,并按照创建时间排序
image_list=$(docker image ls --format "{{.Repository}}:{{.Tag}}|{{.CreatedAt}}" | sort -t "|" -k2,2)
# 获取所有镜像名
image_names=$(echo "$image_list" | awk -F ':' '{print $1}' | uniq)
# 遍历每个镜像名
for image_name in $image_names; do
# 获取特定镜像名的镜像列表
filtered_images=$(echo "$image_list" | awk -F ':' -v name="$image_name" '$1 == name')
# 获取镜像数量
image_count=$(echo "$filtered_images" | wc -l)
# 如果镜像数量超过3个,则删除旧的镜像,只保留最近的两个
if [ $image_count -gt 3 ]; then
images_to_delete=$((image_count - 2))
images_to_delete_list=$(echo "$filtered_images" | head -n $images_to_delete | cut -d "|" -f 1)
for image in $images_to_delete_list; do
docker image rm $image
echo "已删除镜像 $image"
done
fi
done
```
这个脚本将会在删除镜像时输出相应的信息,告诉你哪些镜像被删除了。如果某个镜像名出现超过3次,并且有旧的镜像需要删除时,会输出类似 "已删除镜像 mysql:latest" 的信息。
请再次尝试执行脚本,看看是否能够正常删除旧的镜像,并输出相应的删除信息。如果还有其他问题,请随时告诉我。
修改以下脚本,只让他输出Untagged: uat:041315a16183 Untagged: uat:021283c8eb95这种信息,不输出Error response from daemon: No such image: uat:041315a16183 Error response from daemon: No such image: uat:021283c8eb95 Error response from daemon: No such image: uat:041315a16183 Error response from daemon: No such image: uat:021283c8eb95 Error response from daemon: No such image: uat:041315a16183 Error response from daemon: No such image: uat:021283c8eb95这种信息:#!/bin/bash # 获取所有镜像列表,并按照创建时间排序 image_list=$(docker image ls --format "{{.Repository}}:{{.Tag}}|{{.CreatedAt}}" | sort -t "|" -k2,2) # 获取所有镜像名 image_names=$(echo "$image_list" | awk -F ':' '{print $1}' | uniq) # 遍历每个镜像名 for image_name in $image_names; do # 获取特定镜像名的镜像列表 filtered_images=$(echo "$image_list" | awk -F ':' -v name="$image_name" '$1 == name') # 获取镜像数量 image_count=$(echo "$filtered_images" | wc -l) # 如果镜像数量超过3个,则删除旧的镜像,只保留最近的两个 if [ $image_count -gt 3 ]; then images_to_delete=$((image_count - 2)) images_to_delete_list=$(echo "$filtered_images" | head -n $images_to_delete | cut -d "|" -f 1) for image in $images_to_delete_list; do docker image rm $image done fi done
好的,我已经修改了脚本,使其只输出 "Untagged: " 开头的信息。请尝试以下修改后的脚本:
```bash
#!/bin/bash
# 获取所有镜像列表,并按照创建时间排序
image_list=$(docker image ls --format "{{.Repository}}:{{.Tag}}|{{.CreatedAt}}" | sort -t "|" -k2,2)
# 获取所有镜像名
image_names=$(echo "$image_list" | awk -F ':' '{print $1}' | uniq)
# 遍历每个镜像名
for image_name in $image_names; do
# 获取特定镜像名的镜像列表
filtered_images=$(echo "$image_list" | awk -F ':' -v name="$image_name" '$1 == name')
# 获取镜像数量
image_count=$(echo "$filtered_images" | wc -l)
# 如果镜像数量超过3个,则删除旧的镜像,只保留最近的两个
if [ $image_count -gt 3 ]; then
images_to_delete=$((image_count - 2))
images_to_delete_list=$(echo "$filtered_images" | head -n $images_to_delete | cut -d "|" -f 1)
for image in $images_to_delete_list; do
docker image rm $image
if [[ $image == "Untagged: "* ]]; then
echo "$image"
fi
done
fi
done
```
这个脚本将会在删除镜像时输出相应的信息,只输出以 "Untagged: " 开头的信息。例如,如果删除了镜像 "Untagged: uat:041315a16183" 和 "Untagged: uat:021283c8eb95",则只会输出这两行信息。
请再次尝试执行脚本,看看是否能够正常删除旧的镜像,并只输出相应的信息。如果还有其他问题,请随时告诉我。