2014-03-25 30 views
1

我有一個命令行程序,它將定期打印語句,例如「5%完成」以及其他無關語句。我想將此輸出轉換爲grep,使用它來選擇進度條線,並將它們全部顯示在一行中(即重寫該行)。即寫:使用grep(curses?)從命令行程序輸出固定文本

commandlinecall | grep '%' ??? 

,並得到輸出的這個順序隨着時間的推移:

25% done 

50% done 

75% done 

100% done 

,而不是這樣的:

25% done 

25% done 
50% done 

25% done 
50% done 
75% done 

25% done 
50% done 
75% done 
100% done 

回答

1

不知道如何與grep做到這一點,但awk可以很容易地做到這一點。例如:

# Simple script to generate completion strings 
i=0 
while :; do 
    echo $((i+=4))% done 
    sleep $((RANDOM%3)) 
done | 

# Look for '%' and print out the line with a carriage-return prepended 
awk '/%/ { printf "\r%s Done", $1 }' 

將上述內容複製粘貼到bash命令行中進行測試。

您可能還會考慮將進度百分比管理至zenity。例如:

# Simple script to generate completion strings 
i=0 
while :; do 
    echo $((i+=4))% done 
    sleep $((RANDOM%3)) 
done | 

# This assumes that the progress strings are formatted as above 
grep --line-buffered -o '^[^%]*' | 

# zenity quits when 100 arrives on stdin 
zenity --progress --auto-close --no-cancel