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

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

挑戰: 我需要解析 imagemagick 的“identify”命令的輸出來檢測特定字串的存在。如果它不存在,那麼我會將檔案名稱回顯到螢幕上。

背景: 我有大約 100k 個縮圖(需要分析的範例縮圖)。我需要檢查每個縮圖以確保其正確呈現。幸運的是,「正確渲染」可以透過縮圖中是否存在紅色像素來確定。使用 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 標誌告訴它不要輸出任何行;只是將狀態設為成功或失敗。

該腳本對於包含空格的檔案名稱應該是安全的。

相關內容