如何解析输出以查看字符串是否匹配?

如何解析输出以查看字符串是否匹配?

挑战: 我需要解析 imagemagick 的“identify”命令的输出以检测特定字符串是否存在。如果不存在,则将文件名回显到屏幕上。

背景: 我有大约 10 万张缩略图(需要分析的示例缩略图)。我需要检查每个缩略图以确保其渲染正确。幸运的是,“渲染正确”可以通过缩略图中的红色像素来确定。使用 imagemagick 的“identify”命令,我可以输出包含行“(255, 0, 0) #FF0000 red”的色彩图。

需要: 使用 bash 脚本,我可以轻松获取所有文件名并遍历它们。我需要弄清楚如何默默解析输出并寻找字符串匹配,如果未找到则回显文件名。

具体来说,我想要做的是创建一个执行以下操作的脚本:

1)查找特定目录中的所有 *.png 文件。

2)对于每个文件,运行“ide​​ntify -verbose”并默默将输出传递给...

3)分析输出,查看字符串“(255, 0, 0) #FF0000 red”是否存在。

3a) 如果是,我会默默地继续下一个文件。

3b)如果没有,我会回显文件名。

最终,我会留下一份不包含任何红色像素且需要手动检查的缩略图简短列表。

任何帮助创建这个脚本将是最多赞赏。

答案1

要查找没有红色像素的文件:

for i in *png; do identify -verbose "$i" | gawk -e "{print \"$i\", \$0}" | fgrep -q '(255,  0,  0) #FF0000 red' || echo $i; done

查找具有红色像素的文件:

for i in *png; do identify -verbose "$i" | gawk -e "{print \"$i\", \$0}" | fgrep -q '(255,  0,  0) #FF0000 red' && echo $i; done

gawk 命令将文件名添加到来自identify 命令的每一行输出中。使用 fgrep 而不是 grep 只会查找精确的文本匹配(更快)。fgrep 的 -q 标志告诉它不要输出任何行;只是将状态设置为成功或失败。

该脚本对于包含空格的文件名应该是安全的。

相关内容