寫下所有,然後注意到你的grep語句。 回想一下,ksh不支持..
作爲'擴大這個範圍的值'的指標。 (我認爲這是你的意圖)。由於缺乏對grep的引用參數,它也變得模糊不清。如果您使用的是shell將要轉換的語法,那麼您不會真正知道reg-exp發送給grep的是什麼。總是更好地引用參數,除非你確定知道你需要不加引號的值。嘗試重寫爲
grep '1[1-6]:[0-9][0-9]' | grep '24.12.2012'
另外,你是否故意使用'匹配任何字符'操作符''。或者你想只匹配一段時間字符?如果你只想匹配一段時間,那麼你需要像\.
那樣逃避它。最後,如果你正在處理的任何文件已經在Windows機器上創建,然後轉移到Unix/Linux,很可能是行結束符(Ctrl-MCtrl-J)(\ r \ n)是造成你的問題。用dos2unix file [file2 ...]
清理基於PC的文件(或通過ftp發送的任何內容)。
如果上述不起作用,您將不得不「分而治之」來調試您的問題。
當我做下面的測試,我得到了預期的輸出
$ echo "var1" | while read line ; do print "line=${line}" ; done
line=var1
$ vi Test.txt
$ cat Test.txt
var1
$ cat Test.txt | while read line ; do print "line=${line}" ; done
line=var1
無關你的問題,但一定要引起評論是你在這種情況下使用cat
commnad,這將帶給您UUOC獎。這可以被改寫爲
while read line ; do print "line=${line}" ; done < Test.txt
但解決您的問題,現在打開外殼調試/跟蹤選項,通過更改腳本(shebang行)的頂線一樣
#!/bin/ksh -vx
或者通過使用一對匹配的追蹤只是這些線路的狀態,即
set -vx
while read line; do
print -u2 -- "#dbg: Line=${line}XX"
autosys_showJobHistory.sh $line \
| grep 1[1..6]:[0..9][0..9] \
| grep 24.12.2012 \
| tail -1
done < Test.txt
set +vx
我增加了一個額外的調試步驟中,print -u2 -- ....
(U2 = stderror, - 打印關閉選項處理) 現在,您可以通過查看該輸出來確保沒有額外的空間或製表符字符正在爬行。
它們應該沒有關係,因爲您已將$line
未加引號。作爲測試的一部分,我建議引用它,如"${line}"
。
然後我會註釋掉尾部和grep行。你想知道是什麼步驟導致了這種情況發生,對吧?那麼autosys_script本身仍然會產生你期望的中間輸出嗎?那麼autosys + 1 grep會如預期產生,+ 2 greps,+ tail?您應該能夠輕鬆看到丟失輸出的位置。
IHTH