上星期五想要檢查一個 list 檔案的每個項目是否存在於另一個 log 中,殊不知一個這麼簡單的東東,我到今天下班前才有空把它搞定,雖然也是因為我今天根本沒時間靜下心來思考的緣故?
總之,我的架構是用 cat list 取得所有項目,然後再把它應用在 for loop 中,不確定這樣是不是大家常用的做法,但至少我覺得這樣的語法我比較不會忘記XD
下面是我回家模擬的結果。
雖然我知道原本的錯誤是誤把 \r 也餵進 grep 的 pattern,但我一時之間也無法解釋第一個 inst_b 怎麼會印的跟我想的不一樣?
改天再來想想 ...
2025/06/23 洗完澡更新
詢問 Bard 的結果,這個語法我應該記不住XD
#!/bin/bash
list=list.txt
source=hier.txt
while IFS= read -r pattern; do
pattern=`echo $pattern | tr -d '\r'`
echo $pattern
grep -E $pattern $source
echo -----------
done < $list
2025/06/24 更新
大概可以猜出為什麼會印出 @inst_b 了?
原本應該是印出 #inst_b@,但因為 inst_b 後面有一個 \r 回車字元,故跳回 # 位置,然後印出 @,所以 # 就被覆蓋掉了?
這應該還算是一個合理的解釋吧XD
沒有留言:
張貼留言