我在bash腳本中使用grep時遇到了一些相當不尋常的問題。下面是我使用的是bash腳本代碼的例子表現該行爲:在bash腳本中grep命令的問題
UNIQ_SCAN_INIT_POINT=1
cat "$FILE_BASENAME_LIST" | uniq -d >> $UNIQ_LIST
sed '/^$/d' $UNIQ_LIST >> $UNIQ_LIST_FINAL
UNIQ_LINE_COUNT=`wc -l $UNIQ_LIST_FINAL | cut -d \ -f 1`
while [ -n "`cat $UNIQ_LIST_FINAL | sed "$UNIQ_SCAN_INIT_POINT"'q;d'`" ]; do
CURRENT_LINE=`cat $UNIQ_LIST_FINAL | sed "$UNIQ_SCAN_INIT_POINT"'q;d'`
CURRENT_DUPECHK_FILE=$FILE_DUPEMATCH-$CURRENT_LINE
grep $CURRENT_LINE $FILE_LOCTN_LIST >> $CURRENT_DUPECHK_FILE
MATCH=`grep -c $CURRENT_LINE $FILE_BASENAME_LIST`
CMD_ECHO="$CURRENT_LINE matched $MATCH times," cmd_line_echo
echo "$CURRENT_DUPECHK_FILE" >> $FILE_DUPEMATCH_FILELIST
let UNIQ_SCAN_INIT_POINT=UNIQ_SCAN_INIT_POINT+1
done
在許多場合,grepping在文件位置列表當前行的時候,就已經把沒有輸出到當前dupechk文件,即使在文件位置列表中當前行肯定存在匹配(我在終端中運行命令時沒有問題)。
我在互聯網上搜索,看看是否有其他人有類似的行爲,到目前爲止我發現的是,它是與其他命令的緩衝和無緩衝輸出有關,其他命令在grep命令之前運行Bash腳本....
然而,沒有人似乎已經找到了解決方案,所以基本上我問你們,如果你曾經遇到過這個問題,以及任何想法/提示/解決方案,這個問題...
問候
保羅
你究竟在做什麼?我們可能會提出一個更好的方法來解決這個問題。 – 2010-02-24 16:15:38
我有一個非常長的bash腳本,用於執行在給定目錄中查找重複文件的操作。腳本的這部分是找到重複項並將其打印到文件中。值得注意的是,爲了完成一項大學課程,並且awk命令是不允許的。 – paultop6 2010-02-24 16:19:55
awk命令不允許,但sed/grep是?大聲笑 – ghostdog74 2010-02-24 16:38:29