2013-04-04 36 views
0

我想從郵件日誌中過濾掉日期戳並刪除所有發生的東西: (基本上這是usb歷史清理器腳本的一部分,head -n1僅用於測試)如何防止bash for loop來轉換字符串數據

delimiter=`echo $HOSTNAME | cut -f1 -d.` 

for item in `egrep usb /var/log/messages | awk -F"$delimiter" '{print $1}' | uniq | head -n1`; do 
echo ${item} 
done 

當我運行下面的命令:

egrep usb /var/log/messages | awk -F"$delimiter" '{print $1}' | uniq | head -n1 

輸出爲精:

Mar 31 03:25:03 

但什麼時候會被返還給for循環中,數據傳輸這樣becouse的空間:

Mar 
31 
03:25:03 

的問題是:我怎樣才能防止這種行爲?

回答

2

相反的:

for item in `whatever`; do 
echo ${item} 
done 

使用:

whatever | 
while IFS= read -r item; do 
echo "${item}" 
done 

但你的整個腳本可以被重新寫爲剛:

awk -F"${HOSTNAME%%.*}" '/usb/ && !seen[$1]++ {print $1}' /var/log/messages 
相關問題